Points de passage
Leçon 1 sur 18 du cours Jeu Unity : défense de tours de Coddy.
Dans ce cours, tu construis un jeu de tower defense. Les ennemis avancent par vagues le long d’un chemin en direction de ta base, et tu les arrêtes avec des tours que tu places sur des emplacements de construction, puis que tu améliores et vends. Chaque leçon ajoute une fonctionnalité. Les douze scripts du jeu sont dans le projet dès le départ ; la plupart sont de courts squelettes que les leçons suivantes complètent.
Un ennemi suit le chemin en passant par des waypoints : des GameObjects vides placés aux coins, dans un tableau ordonné selon le parcours. L’ennemi conserve l’index du waypoint vers lequel il se dirige, avance vers celui-ci et, une fois arrivé, passe au suivant. Vector3.MoveTowards(current, target, maxStep) déplace un point vers une cible d’au plus maxStep, sans jamais la dépasser ; l’ennemi arrive donc exactement au waypoint et == permet de détecter son arrivée. Ce drone de patrouille vole entre ses postes et recommence après le dernier :
public Transform[] posts;
public float speed = 3f;
private int current;
void Update()
{
Vector3 goal = posts[current].position;
transform.position = Vector3.MoveTowards(transform.position, goal, speed * Time.deltaTime);
if (transform.position == goal)
{
current = (current + 1) % posts.Length;
}
}Un ennemi ne boucle pas : après le dernier waypoint, il n’a plus d’endroit où aller. Lorsque l’index atteint Length, il ne pointe plus vers un waypoint, et la lecture de waypoints[waypoints.Length] déclenche une exception IndexOutOfRangeException ; l’index est donc vérifié avant d’être utilisé. Les waypoints se trouvent à 0.6 au-dessus du sol, à la hauteur du centre d’un ennemi, de sorte qu’en marchant droit vers eux, ses pieds restent au sol.
Défi
FacileLe Grunt se trouve sur le premier point de passage, WP0, et son script Enemy contient déjà les huit points de passage dans waypoints, de WP0 au point d’apparition à WP7 à la base.
- Ajoute un int privé
next: l’index du point de passage vers lequel le Grunt se dirige. Il commence sur WP0, doncnextcommence à 1. - Dans
Update, déplace le Grunt verswaypoints[next]à une vitesse despeedunités par seconde avecVector3.MoveTowards. - Lorsqu’il arrive à ce point de passage, dirige-le vers le suivant.
- Après le dernier point de passage, arrête-toi : plus aucun déplacement et aucune erreur.
Appuie sur Play et regarde le Grunt parcourir le chemin, puis clique sur Check.
Essayez vous-même
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed = 2f;
public Transform[] waypoints;
void Update()
{
// Parcourez le chemin ici : d’un point de passage à l’autre, dans l’ordre.
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.