Wegpunkte
Lektion 1 von 18 im Kurs Unity-Spiel: Tower Defense von Coddy.
In diesem Kurs entwickelst du ein Tower-Defense-Spiel. Gegner marschieren in Wellen einen Pfad entlang auf deine Basis zu, und du hältst sie mit Türmen auf, die du auf Bauflächen platzierst und anschließend verbesserst oder verkaufst. Jede Lektion fügt ein Feature hinzu. Alle zwölf Skripte des Spiels sind von Anfang an im Projekt; die meisten sind kurze Platzhalter, die in späteren Lektionen ausgefüllt werden.
Ein Gegner folgt dem Pfad über Wegpunkte: leere GameObjects an den Ecken, in einem Array in der Reihenfolge, in der sie abgelaufen werden. Der Gegner speichert den Index des Wegpunkts, auf den er zusteuert, bewegt sich auf ihn zu und geht bei seiner Ankunft zum nächsten über. Vector3.MoveTowards(current, target, maxStep) bewegt einen Punkt höchstens um maxStep auf ein Ziel zu und nie darüber hinaus, sodass der Gegner genau am Wegpunkt ankommt und == erkennen kann, dass er angekommen ist. Diese Patrouillendrohne fliegt zwischen ihren Posten hin und her und beginnt nach dem letzten erneut:
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;
}
}Ein Gegner läuft nicht in einer Schleife: Nach dem letzten Wegpunkt gibt es keinen weiteren. Sobald der Index Length erreicht, verweist er auf keinen Wegpunkt mehr, und das Auslesen von waypoints[waypoints.Length] löst eine IndexOutOfRangeException aus. Deshalb wird der Index überprüft, bevor er verwendet wird. Die Wegpunkte liegen 0.6 über dem Boden, auf Höhe des Mittelpunkts eines Gegners, sodass seine Füße beim geradlinigen Zulaufen auf sie am Boden bleiben.
Aufgabe
EinfachDer Grunt steht auf dem ersten Wegpunkt, WP0, und sein Enemy-Skript hat bereits die acht Wegpunkte in waypoints, von WP0 am Spawn bis WP7 an der Basis.
- Füge ein privates int
nexthinzu: den Index des Wegpunkts, auf den der Grunt zuläuft. Er startet bei WP0, also beginntnextbei 1. - Bewege den Grunt in
UpdatemitVector3.MoveTowardsmitspeedEinheiten pro Sekunde in Richtungwaypoints[next]. - Wenn er diesen Wegpunkt erreicht, soll er auf den nächsten zulaufen.
- Nach dem letzten Wegpunkt anhalten: keine weitere Bewegung und keine Fehler.
Drücke Play und beobachte, wie der Grunt den Weg entlangläuft, dann Check.
Probier es selbst
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed = 2f;
public Transform[] waypoints;
void Update()
{
// Gehe hier den Pfad entlang: von einem Wegpunkt zum nächsten, der Reihe nach.
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.