Quelle est la meilleure pratique pour avoir des ennemis PNJ à l'abri dans un jeu FPS?

8

Ma question concerne la structure des données (et la manière logique d'utiliser cette structure) derrière ce type de comportement d'un ennemi PNJ: comment calcule-t-il l'endroit où il peut se mettre à couvert lorsque le joueur lui tire dessus?

Il peut s'agir d'un jeu de type FPS, ou d'un jeu de société ...

Pierre Watelet
la source

Réponses:

9

Vous avez 3 options principales:

Option n ° 1: (la plus robuste, mais la plus intensive en CPU)

En temps réel, calculez les zones d'angle suffisamment larges pour que le PNJ puisse se cacher et ne soient pas exposées au joueur. Choisissez le plus proche pour que le joueur se cache.

Cela fonctionnera à n'importe quel niveau qui est agréable et à des niveaux avec une géométrie qui change pendant le gameplay. Mais cela prendra plus de temps pour fonctionner de manière cohérente et utilisera jusqu'à la plupart des ressources CPU pendant le jeu.

Option n ° 2: (Économisez du temps de concepteur de niveau, hit minimal en temps réel)

Créez un outil hors ligne qui effectue le test de coin, puis place les nœuds dans votre niveau pour toutes les zones de couverture potentielles. Les LD peuvent ensuite modifier ces nœuds ou supprimer ceux qui ne sont pas appropriés.

Pendant le jeu, trouvez simplement le nœud valide le plus proche.

C'est bien car votre routage de recherche de coin n'a pas besoin d'être précis à 100% car les LD peuvent éliminer quelques mauvais nœuds ici et là. Cependant, je ne peux pas répondre aux changements de géométrie, sauf si vous commencez à être intelligent en les attachant à des objets ou en les scriptant.

Option n ° 3: (Brute Force, coup minimal en temps réel)

Demandez aux LD de placer manuellement tous les nœuds de couverture, puis choisissez simplement le nœud valide le plus proche pendant le jeu.

Si vous avez beaucoup de niveaux ou de grands niveaux, attendez-vous à ce que les LD se plaignent.

wkerslake
la source
3

Je pense que la meilleure façon de le faire serait de configurer manuellement des boîtes dans la ou les zones dans lesquelles vous voulez que les PNJ se mettent à couvert.

Ayez une variable pour "peur" ou une autre métrique que vous voulez, quand un seuil est atteint, le PNJ devrait se déplacer vers la case la plus proche qui est hors de la ligne de vue des joueurs.

Vous pourriez trouver un moyen pour que les ennemis se couvrent dynamiquement derrière n'importe quel objet, mais plus souvent qu'autrement, ceux-ci peuvent générer des positions de couverture étranges et illogiques.

AttackingHobo
la source
1

Il y a une description de la façon dont l'IA de killzone a recherché l'espace de position pour obtenir une bonne position ici (PDF). Vous pouvez modifier la fonction d'évaluation pour augmenter la valeur d'une position de couverture si l'IA est prise pour cible ou fortement endommagée. Ainsi, l'IA qui n'est pas prise pour cible prendrait un peu plus de risques pour atteindre la cible.

Vous pouvez également ajouter la solution d'AttackingHobbo, augmentant l'intérêt de la couverture en fonction du facteur de peur (c.-à-d. 0: je suis invincible / 1: je prends soin / 5 veuillez l'arrêter)

Cordialement

PATRY Guillaume
la source
1

Dépend du style de jeu. Il est assez courant de laisser les concepteurs de niveaux placer des objets de couverture, qui peuvent être un volume, une forme représentant un objet de couverture ou un nœud. C'est plus laborieux pour les LD, mais donne beaucoup plus de contrôle, ce qui est généralement souhaité dans un jeu étroitement scripté.

Pour les jeux en monde ouvert, vous avez besoin d'un système de détection automatique de couverture. Nous en avons utilisé un qui a détecté la couverture lors de l'exécution dans Battlefield: Bad Company (1 & 2) afin de pouvoir invalider et redétecter la destruction de l'environnement.

chaux
la source