Menu
CoddyTech

Datos de los enemigos

Lección 2 de 18 del curso Juego de Unity: defensa de torres de Coddy.

Un juego de defensa de torres tiene distintos tipos de enemigos: soldados rasos, corredores rápidos y tanques lentos. Todos los soldados rasos caminan a la misma velocidad y empiezan con la misma salud, así que esos valores pertenecen al tipo, no a un enemigo en particular. Se guardan en un recurso ScriptableObject, uno por tipo, y cada enemigo de ese tipo apunta a él. Cambia el recurso y todos los enemigos de ese tipo cambiarán con él.

Un recurso no debe contener el estado de un solo enemigo. Un soldado raso que ha recibido un golpe tiene menos salud que el que va detrás, así que el recurso contiene maxHealth, la salud con la que empieza un soldado raso, y cada enemigo la copia en un campo propio. Un juego de carreras divide un auto de la misma manera:

[CreateAssetMenu(fileName = "NewCar", menuName = "Racing/Car Data")]
public class CarData : ScriptableObject
{
    public float topSpeed = 30f;
    public float tankSize = 50f;
}

public class Car : MonoBehaviour
{
    public CarData data;
    private float fuel;

    void Awake()
    {
        fuel = data.tankSize;
    }
}

Todos los autos de un modelo comparten un CarData, y cada uno consume su propio fuel. Si en su lugar escribieras data.tankSize -= used, vaciarías el tanque de todos los autos de ese modelo a la vez y, en el Editor, el cambio permanecería en el recurso después de Play. Awake se ejecuta en cuanto se crea el objeto, así que la copia está lista antes de que nada pueda usarla.

challenge icon

Desafío

Fácil

Un Runner se une al Grunt: es más rápido y tiene menos salud. Dale a cada tipo su propio recurso.

  1. En EnemyData.cs, haz que EnemyData se pueda crear desde el menú Create con el nombre de menú Tower Defense/Enemy Data, y dale los campos públicos speed (un float), maxHealth y reward (int).
  2. En Enemy.cs, reemplaza el campo speed por un campo público data de tipo EnemyData, y haz que se mueva a data.speed.
  3. Añade un int privado health, cuyo valor sea el maxHealth del recurso en Awake.

El proyecto tiene un recurso GruntData (velocidad 2, salud 9, recompensa 5) y un recurso RunnerData (velocidad 3.5, salud 5, recompensa 3), y el Inspector asigna uno propio a cada enemigo. Pulsa Play y observa cómo Runner adelanta a Grunt; después, pulsa Check.

Pruébalo tú mismo

using UnityEngine;

// Más adelante: las estadísticas de un tipo de enemigo, como un recurso.
public class EnemyData : ScriptableObject
{
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Juego de Unity: defensa de torres