Ressources Magic Makers

 

Site en maintenance

 
Nous sommes actuellement entrain de mettre à jour les ressources de ce site.
Pendant la mise à jour vous pouvez retrouver tous les nouveaux contenus sur le site
 

https://lp-magicmakers.fr/

 
 

Voici une vidéo explicative sur le NavMesh et son utilisation. Tu trouveras le détails de cette vidéo ci-après. 

Un NavMesh, c’est quoi?

Un NavMesh c’est un composant un peu spécial d’unity qui permet de créer des zones navigables. L’importance du NavMesh vient quand on veut faire des ennemis ou des personnages avec un minimum d’intelligence, qui doivent se déplacer en évitant des obstacles.

 

Par défaut Unity à son propre system de NavMesh, mais celui-ci ne fonctionne pas en 2D

Pas de panique cependant car il existe un package qui permet de faire la même chose (voir mieux!) en 2D!

Un NavMesh, comment ça marche?

Un NavMesh ça fonctionne avec une grille.

Chaque case de la grille contient un petit morceau du décor. Ce petit morceau va être classé navigable ou non-navigable selon les paramètres que l’on aura donné à l’IA.

Puis notre IA va rassembler toutes ces cases pour se faire une carte dans sa tête, de la ou elle peut aller et la ou elle ne peut pas aller.

Plus les cases sont petites et nombreuses, plus les calculs seront précis, mais plus ils prendront du temps et de la puissance de l’ordinateur.

 

Mettre en place le package

Avant toute chose, il te faudra le package! Ce dernier ne se trouve pas dans le package Manager comme la plupart des packages, mais tu peux le télécharger ici:

> LIEN <

La version gratuite est la bonne bien sûr.

Une fois téléchargé, tu vas tirer le package dans les dossiers de ton projet, dans la fenêtre d’unity.

Tu peux aussi passer par le menu Assets > Import Package:

Dans tous les cas, tu valide l’importation et tu laisse faire Unity.

 

Mettre en place le NavMesh

Maintenant que le package est installé, on va pouvoir l’utiliser.

Et tu va voir que c’est en fait assez simple (même si les composants vont faire un peu peur au début)

On va commencer par choisir un objet qui servira de Manager pour nos IA.

Sur cet objet, on va ajouter un composant qui s’appelle: Pathfinder.

Ce dernier va tracer une grille qui va couvrir notre niveau et permettre à nos IA de choisir leurs chemins et détecter les obstacles.

Quand on l’ajoute ça fait beaucoup de paramètres mais pas de panique! On va avoir besoin d’en modifier en fait très peu!

On ajoute d’abord un grid si il n’y en a pas. Et on ajuste les paramètres.

  1. La forme des cases de la grille
  2. Si on est en 2D ou en 3D
  3. La taille de la grille en largeur, hauteur, et la taille d’une case.
  4. Si on utilise les composants de physique 2d d’unity pour les collision
  5. La forme et la taille moyenne de nos IA (la preview montre à quel point notre IA rentre dans une case. Le but est que ce soit le cas.)
  6. Les Layers sur lesquels sont nos obstacles ou nos sols

Quand on a fini on descend un peu.

Dans les settings on peut aussi désactiver les Logs (pour éviter d’avoir du spam dans la console, vu que la grille nous envoi un message dès que quelque chose se passe, même minime)

 

Et enfin on utilise le bouton Scan pour générer les zones navigables.

Ces dernières apparaissent en bleu, et les obstacles avec des petits carrés rouges.

Créer une IA (qui utilise le NavMesh)

Cette étape là est aussi super facile, car le package A*Pathfinding contient des composants pré-fait!

On va donc soit créer un nouvel ennemi. Soit se mettre sur un ennemis existant que l’on veut faire bouger. On va lui donner les composants suivant:

    • AIPath
    • AIDestinationSetter

Le premier composant c’est les jambes. C’est ce qui fait que l’IA analyse les zones navigables et se déplace dans ces dernières. (vous allez voir que ce composant ajoute aussi un script automatiquement, qui s’appelle seeker, c’est normal, c’est le “cerveau” de l’IA, on a jamais besoin d’y toucher)

  1. La taille de cette IA. On peut changer un peu par rapport à la taille moyenne qu’on a donné à la grille
  2. La vitesse de déplacement de l’IA
  3. Le type d’IA (pour un jeu en 3D ou 2D)
  4. Si l’IA peut tourner sur elle-même, et à quelle vitesse
  5. Quand l’IA suit sa route, à quelle fréquence elle se réoriente (un chiffre plus petit veut dire plus souvent)
  6. A partir de quelle distance l’IA est “presque arrivée” et commence à ralentir
  7. A quelle distance de sa destination l’IA est “arrivée”.
  8. On désactivera la gravité de l’IA pour éviter qu’elle ne parte dans le vide.

Le 2e script est bien plus simple, c’est la cible de l’IA.

Notre IA est prête à fonctionner!

 

Changer la cible pendant le jeu

Bien sûr, l’IA juste au-dessus n’est pas idéale, car elle va fonctionner dès le début et donc détecter le joueur qu’importe la distance à laquelle il est. Et lui foncer dessus tout de suite.

Si on veut on peut donc changer un peu les choses, en ajoutant un script à nous, pour dire à l’IA de ne voir le joueur que s’ il s’approche suffisamment d’elle: 

 

 

public class LocateSiProche : MonoBehaviour

{

//On met une variable pour le composant de ciblage

    public AIDestinationSetter destination;

//On met une variable pour la distance à laquelle l’IA nous localise

    public float distance_detection;

 

    void Update()

    {

//On calcule la distance entre la cible et l’IA. Si c’est moins que la distance de detection

        if (Vector2.Distance(destination.target.position, transform.position) < distance_detection) {

//Alors le script de ciblage s’active

            destination.enabled = true;

        }

        else {

//sinon il se désactive et l’IA arrête de nous chercher

            destination.enabled = false;

        }

    }

}

 

Mettre la grille à jour pendant le jeu

Que fait-on si un de nos obstacles est amovible?
Car la grille de notre IA est calculée avant de lancer le jeu. Hors si notre obstacle bouge, notre IA, elle, ne le sait pas. Elle ne verra donc pas l’obstacle à sa nouvelle place, mais à son ancienne!

Pour éviter ça, on peut ajouter un composant à tous les obstacles qui doivent bouger pendant le jeu:

Dynamic Grid Obstacle

Il ne contient qu’un seul paramètre qui nous intéresse: le check time.
C’est le temps entre deux mises à jour de la grille.
Si notre obstacle bouge vite, il est bon de mettre une petite valeur. Mais attention, plus la valeur est petite, plus l’ordinateur devra faire de calculs!