Данные о враге
Урок 2 из 25 курса Игра на Unity: Tower Defense на Coddy.
К Grunt присоединяется Runner. Он быстрее и у него меньше здоровья, и у всех Runner эти показатели одинаковы, поэтому они относятся к типу, а не к отдельному врагу. Они хранятся в заданном ассете ScriptableObject EnemyData: в проекте есть GruntData (скорость 2, здоровье 9) и RunnerData (скорость 3.5, здоровье 5), а в Inspector каждому врагу назначается свой ассет в поле data.
Каждый враг получает показатели своего типа через это поле каждый раз, когда они ему нужны:
void Start()
{
Debug.Log(name + " pays " + data.reward);
}Здоровье устроено иначе: у Grunt, получившего удар, здоровья меньше, чем у Grunt позади него. Поэтому ассет хранит maxHealth, а каждый враг копирует это значение в собственное поле в Awake, который выполняется сразу после создания объекта. Никогда не меняй сам ассет: тогда изменятся все враги этого типа.
Задание
ЛегкоЗадай каждому врагу характеристики его типа из соответствующего ассета.
- В
Enemyзамениspeedнаpublic EnemyData data;и перемещайся со скоростьюdata.speed. - Добавь
private int health;и присвой ему значениеdata.maxHealthвAwake.
Нажми «Играть»: Runner обгоняет Grunt. Затем нажми «Проверить».
Попробуйте сами
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++;
}
}
}
Все уроки раздела Игра на Unity: Tower Defense
Потренируйтесь самостоятельно: Песочница Unity