Defensa de torres básica
Parte de la sección Arquitectura de juegos en Unity del Journey de Unity de Coddy. Lección 48 de 50.
Los creeps avanzan por el camino hacia tu base, y una sola torre la protege. La torre dispara proyectiles al creep más cercano mientras esté dentro del alcance, y cada creep que derriba otorga oro. La tecla Espacio gasta el oro en el siguiente nivel de la torre: cada nivel alcanza más lejos, dispara más rápido o golpea con más fuerza. Un creep que llega a la base consigue pasar. Los niveles son datos del juego que un diseñador ajusta en un recurso, sin tocar el código, y la torre dispara muchos proyectiles, así que los reutiliza de un grupo en lugar de crear y destruir uno con cada disparo.
Escribe dos scripts: TowerData, el tipo de recurso, y Tower. Creep, Bolt y CreepSpawner están listos.
Desafío
DifícilEl Inspector proporciona a Tower data (el recurso Arrow), boltPrefab y infoText. Lee la barra espaciadora mediante Keyboard.current del Input System.
- En
TowerData.cs: una claseTowerLevelque el Inspector pueda mostrar, conpublic float range,public float fireEvery,public int damageypublic int cost(el precio para alcanzar ese nivel), yTowerData, un ScriptableObject con una entrada en el menú Create ypublic List<TowerLevel> levels. El recurso Arrow contiene tres niveles: alcance 4, intervalo de 1 s, daño 1, coste 0; alcance 5, intervalo de 0.6 s, daño 1, coste 6; alcance 6, intervalo de 0.4 s, daño 2, coste 12. - La torre empieza en el primer nivel con 0 de oro, y
infoTextmuestra ambos valores, comoLevel 1, 0 gold, cada vez que cambian. - Cuando han pasado los segundos indicados por
fireEverydel nivel desde el último disparo y hay un creep al alcance (el collider de un creep dentro derangede la torre, según lo encuentraPhysics.OverlapSphere), la torre dispara al creep más cercano. Obtiene un bolt de unObjectPool<Bolt>, lo coloca en la torre y llama abolt.Launch(creep, damage, pool.Release): el bolt llama a ese último argumento cuando termina, que lo devuelve al pool. Un bolt se desactiva mientras espera en el pool y se activa cuando se obtiene. - Cada creep que muere paga su
bountyen oro: escucha el evento estáticoCreep.Killed. - La barra espaciadora compra el siguiente nivel, si lo hay y el oro alcanza para cubrir su
cost: el coste se descuenta del oro, y la torre sube de nivel y lo registra, comoTower level 2. De lo contrario, al pulsar la barra espaciadora no ocurre nada.
Pulsa Play, mantén la carretera y mejora la torre; luego pulsa Check.
Pruébalo tú mismo
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Pool;
using TMPro;
public class Tower : MonoBehaviour
{
[SerializeField] private TowerData data;
[SerializeField] private Bolt boltPrefab;
[SerializeField] private TMP_Text infoText;
private int level;
private int gold;
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Arquitectura de juegos en Unity
1Componentes, no jerarquías
Componentes pequeñosUn script base para enemigosComponentes abstractosComponentes que trabajan juntosRepaso: torreta modular4Datos serializados
Clases serializablesListas en el InspectorEnumeraciones en el InspectorRepaso: tabla de botín7Máquinas de estados
Estados como clasesUna máquina de estadosTransicionesCerebros de enemigosRepaso: estados de puertas10Proyecto: Superviviente de la arena
El héroeTipos de enemigos2Interfaces en Unity
IDamageableInterfaces y TryGetComponentGetComponentsRepaso: tecla de interacción5ScriptableObjects
Recursos de datosEstadísticas de armasConfiguración compartidaOleadas como datosRepaso: base de datos de objetos