Menu
CoddyTech

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.

challenge icon

Desafio

Difícil

O 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 classe TowerLevel que o Inspector pode exibir, com public float range, public float fireEvery, public int damage e public int cost (o preço para alcançar esse nível), e TowerData, um ScriptableObject com uma entrada no menu Create e uma public 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 infoText mostra ambos, como Level 1, 0 gold, sempre que mudam.
  • Quando se passam os segundos de fireEvery do nível desde o último disparo e há um creep ao alcance (o collider de um creep dentro de range da torre, conforme encontrado por Physics.OverlapSphere), a torre atira no creep mais próximo. Ela pega um projétil de um ObjectPool<Bolt>, posiciona-o na torre e chama bolt.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 bounty em ouro: escute o evento estático Creep.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, como Tower 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;
}
quiz iconTeste seus conhecimentos

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