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.
Wyzwanie
ŁatwyPrzypisz każdemu przeciwnikowi statystyki jego rodzaju z jego zasobu.
- W
Enemyzastąpspeedprzezpublic EnemyData data;i poruszaj się z prędkościądata.speed. - Dodaj
private int health;i ustaw tę zmienną nadata.maxHealthwAwake.
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