Vous recherchez une bonne technique pour le mouvement des personnages dans le jeu de hack & slash

51

Je fais du hack & slash game et je veux que mes personnages bougent, comme par exemple dans Torchlight, Diablo, etc. Actuellement, je génère un ensemble de nœuds pour toutes les zones d'un étage où il est possible de marcher. Lorsque je clique quelque part, le joueur y passe par le chemin interpolé des nœuds. Cela ne semble pas très naturel. Le joueur bouge comme un robot. Les ennemis utilisent également ce système de nœuds pour se déplacer et partagent le même problème, mais ils me posent un autre problème. Lorsque les ennemis détectent un joueur, ils le rejoignent par le chemin le plus court. Parfois, ils utilisent le même chemin et s’alignent au joueur au lieu de l’entourer. Je ne sais pas comment faire en sorte que les ennemis choisissent des chemins différents et entourent le joueur. Savez-vous comment puis-je résoudre ces problèmes? Peut-être que je devrais utiliser une approche différente pour le mouvement du personnage?


Ma technique actuelle:

entrez la description de l'image ici


Capture d'écran aux flambeaux:entrez la description de l'image ici

---MISE À JOUR---

Je veux savoir comment faire face à ces situations:

Situation 1, j'ai des obstacles dynamiques / statiques sur mon chemin

entrez la description de l'image ici

Situation 2, les ennemis ont le même chemin d'accès au joueur (faites la queue pour combattre avec nous) entrez la description de l'image ici

piotrek
la source
10
+1 pour les diagrammes et les captures d'écran (et une bonne question). Toujours utile.
Le canard communiste
C'est une question géniale (+1) pour laquelle j'espère qu'il y aura beaucoup de discussions et de suggestions sur les différentes manières de traiter ce défi (influences aléatoires pour modifier les itinéraires, l'IA, etc.).
Randolf Richardson
1
Je trouve qu’une bonne pratique consiste à utiliser un système de notation lorsque vous créez une IA. Selon le score de chaque ennemi (temps nécessaire pour atteindre le joueur, par exemple), vous pouvez lui attribuer un comportement spécifique. Par exemple, si 8 mobs sont le maximum pour attaquer le joueur, ceux qui ont un score supérieur aux huit premiers peuvent sciemment essayer de trouver un chemin plus long vers le joueur, ce qui leur donnera un aspect plus intelligent.
Jonathan Connell
Je cherche toujours une réponse. Comment puis-je gérer les obstacles (dynamiques / statiques) sur le maillage de navigation? , Je ne peux pas utiliser Recast
piotrek

Réponses:

24

Comportements de direction en combinaison avec une structure de données de navigation .

Il y a plusieurs façons de le faire, mais c'est le concept de base. Il serait peut-être plus facile d’utiliser un maillage de navigation afin de pouvoir appliquer une recherche de trajectoire dans chaque section convexe.

Si vous tenez à conserver un graphique, vous pouvez utiliser un comportement de recherche pour chaque nœud du chemin, plutôt que de suivre de manière stricte un chemin d'un nœud à l'autre.

Une autre méthode que vous pouvez utiliser est Path Smoothing, mais gardez à l’esprit que cela coûte assez cher en calcul.

J'espère que ça t'as aidé.

MODIFIER:

Pour résoudre vos problèmes d’évitement d’obstacles, utilisez une sorte d’ évitement d’obstacles .

Ray Dey
la source
Merci pour la réponse, savez-vous comment puis-je générer un maillage de navigation? Ou y a-t-il un autre moyen de le faire? Ma carte est créée avec des morceaux de sol sans soudure (quads / triangles).
piotrek
1
Vous pouvez toujours utiliser Refonte ( code.google.com/p/recastnavigation ) pour générer un maillage de navigation. Vous avez juste besoin de lui donner une "soupe triangulaire" (un groupe de polygones) et cela va la générer pour vous.
Ray Dey
Suis-je le seul à le rencontrer mais le lien: ai-blog.net/archives/000152.html est mort. En fait, je ne peux pas accéder à www.ai-blog.net
123iamking
3

Si vous préférez vous en tenir à un graphique de nœud plutôt que de basculer vers un maillage de navigation comme l'ont suggéré d'autres personnes, vous pouvez résoudre le problème de la "ligne au joueur au lieu de l'entourer" en assignant à chaque ennemi l'attaque à partir d'une direction particulière.

Il existe de nombreuses façons d’y parvenir, mais j’utilise habituellement un système de «jetons» pour attribuer des directions uniques aux monstres, l’objet joueur possédant un jeton pour chaque direction (nord, nord-est, est, etc.). Lorsqu'un ennemi veut accéder au joueur, il doit d'abord acquérir un jeton de lui. La direction spécifiée par le jeton indique au monstre de quel côté du joueur il est autorisé à se déplacer. Comme le joueur n'a qu'un jeton dans chaque direction, et que les monstres ont besoin d'un jeton avant de pouvoir attaquer, plusieurs monstres n'essaieront pas tous de se diriger vers le même côté du joueur, ce qui devrait les casser un peu.

De plus, vous pouvez également appliquer une petite pénalité aux nœuds lors du processus de recherche de chemins, pour encourager les monstres à s'approcher d'une direction qui correspond à leur jeton. (C’est-à-dire que si un monstre a le jeton qui lui permet d’attaquer de l’est, alors, dans le but de déterminer le "chemin le plus court" pour ce monstre, traitez tous les nœuds de chemin situés au nord / ouest / sud du joueur comme si: ils sont plusieurs nœuds, au lieu d'un seul). Cela permettra aux monstres de se séparer plus rapidement et d’essayer de flanquer le joueur au lieu de marcher jusqu’au joueur dans un fichier unique et de ne se propager qu’à la dernière étape.

Trevor Powell
la source
2

En gros, pour les ennemis, ce que vous voulez faire est de rechercher le chemin au niveau macro (pensez à générer des zones convexes et le chemin vers la zone dans laquelle se trouve le joueur), et à adopter des comportements de direction de style boid au niveau micro (une fois que vous êtes proche). au joueur).

Voici un exemple de comportement boid: http://www.red3d.com/cwr/boids/

Pour le joueur, je pense que torchlight effectue la recherche de trajectoire sur un maillage de navigation vers l'endroit où vous cliquez / glissez, et cela fonctionne plutôt bien. Cela peut sembler un peu plus déconnecté que le contrôle direct, mais cela conduit à de meilleurs résultats pour le joueur.

Tétrade
la source
Mais quoi avec des escaliers par exemple? L'ennemi peut m'attaquer là aussi, en faire un autre maillage de navigation?
piotrek
Il devrait faire partie du maillage de navigation, étant sa propre forme convexe.
Tetrad
1
Sinon, vous pouvez continuer à utiliser votre cheminement de point à point et à adopter des comportements de direction basés sur la physique lorsque vous vous "approchez".
Tetrad
Comment puis-je gérer les obstacles dynamiques sur les mailles de navigation?
piotrek
1
Voici un article de blog sur le fonctionnement de la refonte: digestingduck.blogspot.com/2011/03/… .
Tetrad
1

il existe un algorithme nommé rrt qui est utilisé pour le problème de recherche de chemins dans le monde réel. la surface sur laquelle votre héros (ou vos ennemis) peut marcher est une entrée avec la surface que les objets peuvent déplacer, et en utilisant un algorithme d'optimisation, elle trouve un chemin vers votre destination. autant que je sache, cet algorithme est grandement utilisé dans les ligues robocup. il est rapide, trouve le chemin le plus court et évite les collisions et les virages serrés. vous pouvez utiliser ce diaporama PowerPoint pour comprendre comment il génère un chemin.

Ali1S232
la source
Après avoir examiné de plus près, il semble que la présentation que j'ai fournie indique simplement ce que fait vraiment et suggère également une nouvelle approche, qui prétend fonctionner mieux dans certains cas.
Ali1S232
0

Pour que les itinéraires exploratoires paraissent plus "réalistes", je vous suggère de consulter l'article sur les A * d'apparence naturelle dans Game Programming Gems Vol.1

freud
la source