Menu
CoddyTech

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.

challenge icon

Desafío

Difícil

El 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 clase TowerLevel que el Inspector pueda mostrar, con public float range, public float fireEvery, public int damage y public int cost (el precio para alcanzar ese nivel), y TowerData, un ScriptableObject con una entrada en el menú Create y public 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 infoText muestra ambos valores, como Level 1, 0 gold, cada vez que cambian.
  • Cuando han pasado los segundos indicados por fireEvery del nivel desde el último disparo y hay un creep al alcance (el collider de un creep dentro de range de la torre, según lo encuentra Physics.OverlapSphere), la torre dispara al creep más cercano. Obtiene un bolt de un ObjectPool<Bolt>, lo coloca en la torre y llama a bolt.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 bounty en oro: escucha el evento estático Creep.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, como Tower 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;
}
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 Arquitectura de juegos en Unity