Menu
CoddyTech

Данные о враге

Урок 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, который выполняется сразу после создания объекта. Никогда не меняй сам ассет: тогда изменятся все враги этого типа.

challenge icon

Задание

Легко

Задай каждому врагу характеристики его типа из соответствующего ассета.

  1. В Enemy замени speed на public EnemyData data; и перемещайся со скоростью data.speed.
  2. Добавь 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