Punti di passaggio
Lezione 1 di 18 del corso Gioco Unity: difesa della torre di Coddy.
In questo corso costruirai un gioco tower defense. I nemici avanzano lungo un percorso a ondate verso la tua base, e tu li fermi con torri che piazzi sulle piazzole di costruzione, poi potenzi e vendi. Ogni lezione aggiunge una funzionalità. Tutti e dodici gli script del gioco sono presenti nel progetto fin dall'inizio; la maggior parte sono brevi scheletri che le lezioni successive completeranno.
Un nemico segue il percorso attraverso i punti di passaggio: GameObject vuoti agli angoli, disposti in un array nell'ordine in cui vengono attraversati. Il nemico conserva l'indice del punto di passaggio verso cui è diretto, si muove verso di esso e, quando lo raggiunge, prosegue verso il successivo. Vector3.MoveTowards(current, target, maxStep) sposta un punto verso un obiettivo al massimo di maxStep e non lo supera mai, così il nemico arriva esattamente sul punto di passaggio e == può rilevare che è arrivato. Questo drone di pattuglia vola tra le sue postazioni e ricomincia dopo l'ultima:
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 nemico non ripete il percorso: dopo l'ultimo punto di passaggio non ha più una destinazione. Quando l'indice raggiunge Length, non indica più un punto di passaggio e leggere waypoints[waypoints.Length] genera un'eccezione IndexOutOfRangeException, quindi l'indice viene controllato prima di essere usato. I punti di passaggio si trovano 0.6 sopra il terreno, all'altezza del centro di un nemico, così camminare dritto verso di essi mantiene i suoi piedi a terra.
Sfida
FacileIl Grunt si trova sul primo waypoint, WP0, e il suo script Enemy ha già gli otto waypoint in waypoints, da WP0 allo spawn a WP7 alla base.
- Aggiungi un int privato
next: l’indice del waypoint verso cui si dirige il Grunt. Inizia da WP0, quindinextparte da 1. - In
Update, sposta il Grunt versowaypoints[next]aspeedunità al secondo conVector3.MoveTowards. - Quando raggiunge quel waypoint, dirigiti verso quello successivo.
- Dopo l’ultimo waypoint, fermati: niente altri movimenti e nessun errore.
Premi Play e osserva il Grunt percorrere il tragitto, poi fai clic su Check.
Provalo tu
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed = 2f;
public Transform[] waypoints;
void Update()
{
// Percorri il percorso qui: da un punto di passaggio all'altro, nell'ordine.
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.