Et voilà notre barbare évite les objets qui se déplacent.
Pour faire patrouiller notre personnage nous allons avoir besoin de plusieurs composants en plus du script.
Tout d’abord nous allons ajouter un composant Animator sur le personnage pour que celui-ci puisse être animé.
Sur notre componnant Animator, nous allons devoir ajouter également un Controller.
Nous allons ici choisir le NavmeshWalk.
Pour définir la trajectoire de la patrouille nous allons ensuite créer des Empty GameObject et les placer aux points endroits où le personnage doit passer. Ces points sont appelés Patrol points ou Waypoint dans les scripts. Le script permet que le personnage avance en ligne droite entre ces deux points.
Pour être reconnus comme Waypoint il faut ajouter le script Waypoint a ces objets.
On voit alors que leur emplacement est entouré des axes d’une sphère rouge comme sur l’exemple ci-contre.
Ajoutons maintenant le script à notre personnage pour y définir les points de passage.
Pour ajouter les Patrol Points, on clique sur la petit flèche puis dans Size on entre le nombre de points de passage (au moins 2 pour une ligne droite).
Ensuite on met chaque GameObject avec le script Waypoint dans un des Element.
Il y a également trois autres paramètres sur le script Patrouille :
Enfin il faut créer les surfaces sur lesquelles notre personnage va pouvoir se déplacer en créant un Nav Mesh.
Nous allons voir en détail comment le créer, mais d’abord on va ajouter le script Nav Mesh Agent à notre personnage pour dire qu’il se déplace sur un Nav Mesh.
Le Nav Mesh correspond à la zone de navigation. Pour la générer et l’éditer nous allons avoir besoin de la fenêtre de Navigation.
Pour l’ouvrir, on va dans Windows > AI > Navigation.
La fenêtre de navigation s’ouvre alors sur la colonne de droite à coté de l’Inspector.
Deux onglets de la fenêtre de navigation vont nous intéresser particulièrement : l’onglet Agent et l’onglet Bake.
L’onglet Bake permet de créer la zone navigable.
La zone navigable est composée de plusieurs surfaces d’objets statiques. Avant de lancer le Bake on va vérifier que tous les objets sur lesquels on veut naviguer sont bien en mode Static.
Pour qu’un objet soit Static, il faut vérifier que la case Static en haut à droite dans l’Inspector soit cochée.
Il ne reste plus qu’a appuyer sur Play et regarder le résultat. Si ça ne fonctionne pas correctement, vérifie que tu as bien réalisé toutes les étapes précédentes !
On voit alors qu’une zone blanche entoure l’objet et que celui-ci est gris. Ces zones ne sont désormais plus navigables et n’apparaissent plus en bleu.
Si on lance le jeu on voit bien que notre personnage évite les obstacles et les contourne
Dans l’outil Navigation il y a plusieurs outils intéressants.
L’outil Step Height permet de définir les hauteurs de marches qui peuvent être franchies.
Cet outil est présent à la fois dans l’onglet Bake pour les hauteurs de marches que le NavMesh supportera, et dans l’onglet Agents, pour définir les marches que notre personnage peut monter. Si la Step Height du personnage est plus faible que celle du NavMesh alors il y a certaines marches qui apparaîtront en bleu sur le NavMesh mais que le personnage ne pourra pas franchir.
Ci-dessus on peut voir les différents endroits où l’on peut régler la Step Height ainsi que le rendu d’une marche franchissable.
Enfin sur l’onglet Build on a deux autres outils :
Sur l’image au-dessus, on peut voir les zones navigables. On voit que la pente est reconnue, et qu’on a de nombreux cercles avec des flèches.
Au niveau des marches c’est l’illustration du Drop Height qui indique qu’on peut sauter.
De même au niveau du trou entre les deux plateformes qui illustrent le Jump Distance.
Voici quelques exemples utilisant ces différents outils :
Barbare qui escalade une paroi et saute un obstacle
Jusqu’à présent pour détecter les objets appartenant au NavMesh, on les fixait comme static.
Il est également possible d’avoir des obstacles qui se déplacent. Pour cela nous n’allons pas les fixer comme static, mais ajouter à notre obstacle le component Nav Mesh Obstacle.
Pour que le calcul de la trajectoire prenne en compte en avance le déplacement des objets, on va cocher la case Carve et décocher la case Carve Only Stationary.
Si on ne coche pas la case Carve le personnage ajustera sa trajectoire uniquement quand il entre en collision avec un objet.
Si l’on ne choisit pas le mode Carve, il est possible de modifier la distance à partir de laquelle le personnage détecte l’objet.
Pour cela il suffit d’aller sur le component Nav Mesh Agent de notre personnage et de modifier le Radius dans Obstacle Avoidance.
Si l’on est en mode Carve, on peut vérifier que la NavMesh évolue en fonction du déplacement de l’objet.
Pour avoir cette vue, appuie sur Play puis clique sur le bouton Guizmos en haut à droite de l’écran et mets toi dans la fenêtre Navigation sur la droite.
Et voilà notre barbare évite les objets qui se déplacent.