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.
Desafio
FácilDê a cada inimigo os atributos de seu tipo a partir do asset.
- Em
Enemy, substituaspeedporpublic EnemyData data;e faça-o andar adata.speed. - Adicione
private int health;e defina-o comodata.maxHealthemAwake.
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