Menu
CoddyTech

Dane przeciwnika

Lekcja 2 z 25 w kursie Gra w Unity: Obrona wieży w Coddy.

Do Grunta dołącza Runner. Jest szybszy i ma mniej zdrowia, a każdy Runner ma takie same wartości, więc są one przypisane do rodzaju, a nie do pojedynczego przeciwnika. Są one przechowywane w odpowiednim zasobie EnemyData typu ScriptableObject: projekt zawiera GruntData (szybkość 2, zdrowie 9) i RunnerData (szybkość 3.5, zdrowie 5), a w Inspectorze każdemu przeciwnikowi przypisuje się własny zasób w polu data.

Każdy przeciwnik odczytuje wartości swojego rodzaju za pośrednictwem tego pola za każdym razem, gdy ich potrzebuje:

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

Zdrowie działa inaczej: Grunt, który otrzymał cios, ma go mniej niż stojący za nim Grunt. Dlatego zasób przechowuje maxHealth, a każdy przeciwnik kopiuje tę wartość do własnego pola w Awake, które uruchamia się zaraz po utworzeniu obiektu. Nigdy nie zmieniaj samego zasobu: zmieniłby się on dla wszystkich przeciwników tego rodzaju.

challenge icon

Wyzwanie

Łatwy

Przypisz każdemu przeciwnikowi statystyki jego rodzaju z jego zasobu.

  1. W Enemy zastąp speed przez public EnemyData data; i poruszaj się z prędkością data.speed.
  2. Dodaj private int health; i ustaw tę zmienną na data.maxHealth w Awake.

Naciśnij „Graj”: Runner wyprzedza Grunta. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

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++;
        }
    }
}

Wszystkie lekcje w sekcji Gra w Unity: Obrona wieży

Poćwicz samodzielnie: Edytor online Unity