Menu
CoddyTech

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.

challenge icon

Wyzwanie

Łatwy

Grunt 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.

  1. Dodaj prywatne int next: indeks punktu trasy, do którego zmierza Grunt. Zaczyna na WP0, więc next zaczyna od 1.
  2. W Update przemieszczaj Grunta w kierunku waypoints[next] z prędkością speed jednostek na sekundę, używając Vector3.MoveTowards.
  3. Gdy dotrze do tego punktu trasy, skieruj go do następnego.
  4. 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.
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Gra Unity: Obrona wieżowa