Defesa de Torre Lite
Parte da seção Arquitetura de Jogos no Unity do Journey de Unity da Coddy. Lição 61 de 64.
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 no próximo nível da torre: cada nível aumenta o alcance, a velocidade dos disparos ou o 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 conjunto, em vez de criar e destruir um a cada disparo.
Escreva dois scripts: TowerData, o tipo de asset, e Tower. Creep, Bolt e CreepSpawner já estão prontos, assim como Nearest e Show da torre.
Desafio
DifícilFinalize a torre; Nearest(range) e Show() estão prontos.
TowerLevel: serializável,range,fireEvery,damageecostpúblicos.TowerDatacontémpublic List<TowerLevel> levels.- A cada
fireEverysegundos, seNearest(range)encontrar um creep, coloque um projétil de umObjectPool<Bolt>na torre:bolt.Launch(creep, damage, pool.Release). - Use
Show()depois queCreep.Killedpagarbountye depois que a barra de espaço comprar o próximo nível por seucost, registrandoTower level 2.
Pressione “Jogar” e aprimore a torre. Depois, “Verificar”.
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;
// Pronto: o creep mais próximo da torre dentro do alcance, ou null.
Creep Nearest(float range)
{
Creep nearest = null;
float best = Mathf.Infinity;
foreach (Collider hit in Physics.OverlapSphere(transform.position, range))
{
if (hit.TryGetComponent(out Creep creep))
{
float distance = Vector3.Distance(transform.position, creep.transform.position);
if (distance < best)
{
best = distance;
nearest = creep;
}
}
}
return nearest;
}
// Pronto: mostra o nível e o ouro, como em Level 1, 0 gold.
void Show()
{
infoText.text = "Level " + (level + 1) + ", " + gold + " gold";
}
}
Todas as lições de Arquitetura de Jogos no Unity
1Componentes, não hierarquias
Componentes pequenosUm script base de inimigoComponentes abstratosComponentes trabalhando juntosRevisão: torre modularRevisão: canhão duplo4Dados Serializados
Classes SerializáveisListas no InspectorEnums no InspectorRevisão: Tabela de LootRevisão: Sorteie o Loot2Interfaces no Unity
IDamageableInterfaces e TryGetComponentGetComponentsRevisão: tecla de interaçãoRevisão: mais próximo ao alcance5ScriptableObjects
Ativos de DadosAtributos da ArmaConfigurações CompartilhadasSalve o VentoOndas como DadosRevisão: Banco de ItensRevisão: Comprar na LojaPratique por conta própria: Playground de Unity