Defesa de Torre Lite
Parte da seção Arquitetura de jogos no Unity do Journey de Unity da Coddy. Lição 48 de 50.
Os creeps marcham pela estrada em direção à sua base, e uma única torre a protege. A torre dispara projéteis contra o creep mais próximo enquanto ele estiver ao alcance, e cada creep que ela derruba rende ouro. A tecla Espaço gasta o ouro para comprar o próximo nível da torre: cada nível alcança mais longe, dispara mais rápido ou causa mais dano. Um creep que chega à base consegue passar. Os níveis são dados do jogo que um designer ajusta em um asset, sem tocar no código, e a torre dispara muitos projéteis, então ela os reutiliza de um pool em vez de criar e destruir um a cada disparo.
Escreva dois scripts: TowerData, o tipo do asset, e Tower. Creep, Bolt e CreepSpawner já estão prontos.
Desafio
DifícilO Inspector fornece data para Tower (o asset Arrow), boltPrefab e infoText. Leia a tecla Espaço por meio de Keyboard.current do Input System.
- Em
TowerData.cs: uma classeTowerLevelque o Inspector pode exibir, compublic float range,public float fireEvery,public int damageepublic int cost(o preço para alcançar esse nível), eTowerData, um ScriptableObject com uma entrada no menu Create e umapublic List<TowerLevel> levels. O asset Arrow contém três níveis: alcance 4, intervalo de 1 s, dano 1, custo 0; alcance 5, intervalo de 0.6 s, dano 1, custo 6; alcance 6, intervalo de 0.4 s, dano 2, custo 12. - A torre começa no primeiro nível com 0 de ouro, e
infoTextmostra ambos, comoLevel 1, 0 gold, sempre que mudam. - Quando se passam os segundos de
fireEverydo nível desde o último disparo e há um creep ao alcance (o collider de um creep dentro derangeda torre, conforme encontrado porPhysics.OverlapSphere), a torre atira no creep mais próximo. Ela pega um projétil de umObjectPool<Bolt>, posiciona-o na torre e chamabolt.Launch(creep, damage, pool.Release): o projétil chama esse último argumento quando termina, devolvendo-se ao pool. Um projétil fica desativado enquanto aguarda no pool e é ativado quando retirado. - Cada creep que morre paga seu
bountyem ouro: escute o evento estáticoCreep.Killed. - A tecla Espaço compra o próximo nível, se houver um e o ouro for suficiente para cobrir seu
cost: o custo é descontado do ouro, e a torre sobe de nível e registra isso, comoTower level 2. Caso contrário, Espaço não faz nada.
Pressione Play, mantenha a estrada sob controle e aprimore a torre, depois Check.
Experimente você mesmo
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 lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Arquitetura de jogos no Unity
1Componentes, não hierarquias
Componentes pequenosUm script-base para inimigosComponentes abstratosComponentes trabalhando juntosRevisão: Torre modular4Dados Serializados
Classes SerializáveisListas no InspectorEnums no InspectorRevisão: Tabela de Loot7Máquinas de Estados
Estados como ClassesUma Máquina de EstadosTransiçõesInteligências dos InimigosRevisão: Estados da Porta10Projeto: Sobrevivente da Arena
O HeróiTipos de Inimigos5ScriptableObjects
Assets de dadosAtributos das armasConfigurações compartilhadasOndas como dadosRevisão: banco de dados de itens