Menu
CoddyTech

Dados dos inimigos

Lição 2 de 25 do curso Jogo de Unity: Defesa de Torres da Coddy.

Um Runner se junta ao Grunt. Ele é mais rápido e tem menos vida, e todos os Runners compartilham esses valores, então eles pertencem ao tipo, não a um inimigo específico. Eles ficam no EnemyData fornecido, um recurso ScriptableObject: o projeto tem GruntData (velocidade 2, vida 9) e RunnerData (velocidade 3.5, vida 5), e o Inspector atribui a cada inimigo o seu próprio recurso em um campo data.

Cada inimigo lê os valores do seu tipo por meio desse campo sempre que precisa deles:

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

A vida é diferente: um Grunt que sofreu um golpe tem menos vida do que o Grunt atrás dele. Por isso, o recurso armazena maxHealth, e cada inimigo o copia para um campo próprio em Awake, que é executado assim que o objeto é criado. Nunca altere o próprio recurso: todos os inimigos daquele tipo seriam afetados.

challenge icon

Desafio

Fácil

Dê a cada inimigo os atributos de seu tipo a partir do asset.

  1. Em Enemy, substitua speed por public EnemyData data; e faça-o andar a data.speed.
  2. Adicione private int health; e defina-o como data.maxHealth em Awake.

Pressione “Jogar”: o Runner ultrapassa o Grunt. Em seguida, pressione “Verificar”.

Experimente você mesmo

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

Todas as lições de Jogo de Unity: Defesa de Torres

Pratique por conta própria: Playground de Unity