Menu
CoddyTech

Gegnerdaten

Lektion 2 von 25 im Kurs Unity-Spiel: Tower Defense von Coddy.

Ein Runner kommt zum Grunt hinzu. Er ist schneller und hat weniger Gesundheit, und jeder Runner hat dieselben Werte. Deshalb gehören sie zum Typ und nicht zu einem einzelnen Gegner. Sie sind im vorgegebenen EnemyData-Asset vom Typ ScriptableObject gespeichert: Das Projekt enthält GruntData (Geschwindigkeit 2, Gesundheit 9) und RunnerData (Geschwindigkeit 3.5, Gesundheit 5), und im Inspector erhält jeder Gegner sein eigenes Asset in einem data-Feld.

Jeder Gegner liest die Werte seines Typs über dieses Feld aus, wann immer er sie benötigt:

void Start()
{
    Debug.Log(name + " pays " + data.reward);
}

Bei der Gesundheit ist es anders: Ein Grunt, der einen Treffer abbekommen hat, hat weniger Gesundheit als der Grunt hinter ihm. Deshalb enthält das Asset maxHealth, und jeder Gegner kopiert diesen Wert in Awake in ein eigenes Feld. Diese Methode wird ausgeführt, sobald das Objekt erstellt wird. Ändere niemals das Asset selbst: Sonst würde sich der Wert für jeden Gegner dieses Typs ändern.

challenge icon

Aufgabe

Einfach

Gib jedem Gegner die Werte seiner Art aus seinem Asset.

  1. Ersetze in Enemy speed durch public EnemyData data; und bewege dich mit data.speed.
  2. Füge private int health; hinzu und setze den Wert in Awake auf data.maxHealth.

Drücke „Spielen“: Der Runner überholt den Grunt. Drücke dann „Prüfen“.

Probier es selbst

using UnityEngine;

public class Enemy : MonoBehaviour
{
    public float speed = 2f;
    public Transform[] waypoints;

    private int next = 1;

    void Update()
    {
        if (next >= waypoints.Length)
        {
            return;
        }

        Vector3 target = waypoints[next].position;
        transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime);
        if (transform.position == target)
        {
            next++;
        }
    }
}

Alle Lektionen in Unity-Spiel: Tower Defense

Übe selbstständig: Unity-Playground