J'ai un jeu multijoueur et je fais des prédictions côté client, mais certains joueurs peuvent boire une potion et devenir invisibles ...
Le problème est que lorsqu'ils deviennent invisibles, je ne partage rien que le client puisse utiliser pour savoir qu'il est là, donc lorsqu'un joueur essaie de pénétrer dans une tuile occupée par un joueur invisible, il prédit qu'il réussit, puis obtient un laide correction de position envoyée par le serveur.
Une solution serait de partager quelque chose pour que le client puisse le dire, mais les pirates pourraient ensuite l'utiliser pour découvrir où se trouvent les joueurs invisibles, tricher.
Btw j'ai déjà résolu la prédiction des mouvements réguliers, cela fonctionne parfaitement.
multiplayer
client-server
affiszervmention
la source
la source
Réponses:
Cela pourrait être considéré comme un problème d'animation. Si une correction de position revient du serveur suite à une tentative de se déplacer vers un objet invisible, renvoyez non seulement la correction mais un indicateur indiquant pourquoi la correction était nécessaire. Au lieu d'un joueur qui saute en arrière, il peut faire une sorte d'animation "woah" en arrière, ce qui donne plus vraisemblablement l'impression qu'il vient de tomber sur quelque chose.
Dans les jeux utilisant cette approche, il n'est pas rare de supprimer l'invisibilité (au moins momentanément) de tout ce qui a été rencontré. Entre autres choses, cela incite les joueurs invisibles à éviter les foules ou à se rapprocher trop des autres personnages, ce qui réduit la fréquence à laquelle la collision avec un joueur invisible se produit en premier lieu. Ainsi, même si votre animation pour ce type de collision est faible (ou inexistante), elle est quelque peu cachée par le personnage invisible apparaissant dans la visibilité et télégraphiant clairement à tout le monde ce qui vient de se produire.
Le besoin d'animation pourrait être supprimé en ne laissant pas l'invisibilité fonctionner à courte distance. Cela incite encore plus les joueurs invisibles à éviter de se rapprocher des autres personnages. Il s'agit d'une approche courante pour les jeux basés sur la furtivité et l'IA (remplacer "invisible" par "non visible pour la cible") et peut être vue dans les jeux PvP comme World of Tanks. Il n'y a pas besoin de s'inquiéter de la réponse aux collisions avec des personnages invisibles si rien d'invisible n'est jamais assez proche de vous pour entrer en collision (dans les limites de latence).
La solution de Dracor pour simplement ignorer les collisions avec des objets invisibles est également une bonne solution. Cela nécessite à nouveau quelques animations (pour le client des joueurs invisibles) afin que les objets ne se contentent pas de couper l'avatar du joueur sur son écran. Si vous ne faites rien d'autre, vous pouvez faire en sorte que les objets visibles repoussent toujours les objets invisibles afin que le joueur invisible soit automatiquement déplacé sur le serveur si quelqu'un entre en collision avec lui.
Les collisions invisibles-invisibles sont un peu plus délicates. Il peut être avantageux de simplement désactiver les collisions sur eux car personne ne peut voir si deux objets invisibles s’écrêtent ensemble (en supposant par "invisible" nous voulons dire que les deux objets ne sont pas visibles pour le même client). Si l'un des objets devient visible, il revient automatiquement à la réponse de collision visible-invisible (repoussez l'objet invisible).
Tout cela devient plus compliqué si l'invisibilité a compliqué des ensembles de qui peut voir qui. La première ou la deuxième solution ci-dessus est probablement la meilleure ici si vous en avez besoin. Tous les problèmes comme celui-ci n'ont pas besoin d'une solution technique; beaucoup ont juste besoin de solutions de conception (par exemple, ne laissez pas cette fonctionnalité à vos concepteurs).
la source
Je ne vois vraiment que deux options ici si vous ne voulez pas dire au client où se trouve le joueur invisible: 1) Vous ignorez la collision d'unités pour les joueurs invisibles - une solution simple, et les joueurs ne pourraient pas trouver les joueurs invisibles en tests de collision non plus. 2) Après avoir décidé du chemin prévu, vous envoyez au serveur le chemin prévu et corrigez le chemin lui-même côté serveur, puis renvoyez le nouveau chemin.
la source
À moins que je ne comprenne quelque chose, la solution est simple. N'envoyez pas au client des informations sur tous les joueurs invisibles, uniquement sur ceux qui se trouvent à portée qu'ils pourraient subir une collision dans les limites du mouvement pendant l'intervalle prévu. En d'autres termes, si le client ne doit prévoir que 200 ms dans le futur, n'envoyez que des informations sur les joueurs invisibles à l'intérieur des
max_player_velocity units/sec * 1/5 sec
unités.la source