Punkty nawigacyjne
Lekcja 1 z 18 w kursie Gra Unity: Obrona wieżowa w Coddy.
W tym kursie zbudujesz grę typu tower defense. Wrogowie maszerują falami wzdłuż ścieżki w kierunku twojej bazy, a ty powstrzymujesz ich za pomocą wież, które umieszczasz na platformach budowlanych, a następnie ulepszasz i sprzedajesz. Każda lekcja dodaje jedną funkcję. Wszystkie dwanaście skryptów gry znajduje się w projekcie od samego początku; większość to krótkie szkielety, które zostaną uzupełnione w późniejszych lekcjach.
Wróg podąża ścieżką przez punkty trasy: puste obiekty GameObject w narożnikach, ułożone w tablicy w kolejności, w jakiej są pokonywane. Wróg przechowuje indeks punktu trasy, do którego zmierza, porusza się w jego kierunku, a po dotarciu do niego przechodzi do następnego. Vector3.MoveTowards(current, target, maxStep) przesuwa punkt w kierunku celu maksymalnie o maxStep i nigdy poza niego, więc wróg zatrzymuje się dokładnie w punkcie trasy, a == może stwierdzić, że dotarł na miejsce. Ten dron patrolowy lata między swoimi stanowiskami i zaczyna od nowa po dotarciu do ostatniego:
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;
}
}Wróg nie porusza się w pętli: za ostatnim punktem trasy nie ma już dokąd iść. Gdy indeks osiąga wartość Length, nie wskazuje już żadnego punktu trasy, a odczyt waypoints[waypoints.Length] powoduje wyjątek IndexOutOfRangeException, dlatego indeks jest sprawdzany przed użyciem. Punkty trasy znajdują się 0.6 nad ziemią, na wysokości środka wroga, więc poruszanie się prosto w ich kierunku utrzymuje jego stopy na ziemi.
Wyzwanie
ŁatwyGrunt stoi na pierwszym punkcie trasy, WP0, a jego skrypt Enemy ma już osiem punktów trasy w waypoints, od WP0 w miejscu pojawienia się do WP7 przy bazie.
- Dodaj prywatne int
next: indeks punktu trasy, do którego zmierza Grunt. Zaczyna na WP0, więcnextzaczyna od 1. - W
Updateprzemieszczaj Grunta w kierunkuwaypoints[next]z prędkościąspeedjednostek na sekundę, używającVector3.MoveTowards. - Gdy dotrze do tego punktu trasy, skieruj go do następnego.
- Po ostatnim punkcie trasy zatrzymaj go: bez dalszego ruchu i bez błędów.
Naciśnij Play i obserwuj, jak Grunt przemierza trasę, a następnie kliknij Check.
Spróbuj swoich sił
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed = 2f;
public Transform[] waypoints;
void Update()
{
// Przejdź tutaj całą trasę: od jednego punktu trasy do następnego, po kolei.
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.