Menu
CoddyTech

Ondas de Inimigos

Parte da seção Arquitetura de jogos no Unity do Journey de Unity da Coddy. Lição 44 de 50.

challenge icon

Desafio

Médio

Agora, os inimigos surgem em ondas, e as ondas são dados. Mantenha tudo das lições anteriores. A arena não tem mais inimigos próprios: os prefabs Grunt e Dasher contêm seus scripts, há quatro pontos de surgimento nos cantos, e o objeto Spawner no meio tem o script WaveSpawner.

  • Em WaveSet.cs, adicione uma classe Wave com [System.Serializable], com public Enemy enemy (o prefab), public int count e public float spacing. WaveSet é um ScriptableObject com [CreateAssetMenu], uma public List<Wave> waves e um public float restBetweenWaves. O asset Arena da cena contém três ondas (3 grunts com 0.5 s de intervalo, 2 dashers com 1 s de intervalo, 5 grunts com 0.4 s de intervalo) e um descanso de 2 segundos.
  • Enemy recebe public static event Action<Enemy> Died, acionado com o inimigo logo antes de ele ser destruído.
  • WaveSpawner tem waveSet e spawnPoints definidos no Inspector, e public int Wave { get; private set; }, o número da onda em andamento. A partir de Start, uma coroutine executa as ondas do asset em ordem. Para cada uma: some 1 a Wave e registre-o, como Wave 1; gere os inimigos da onda, conforme count, com intervalos de spacing segundos, com o inimigo i (a partir de 0) em spawnPoints[i % spawnPoints.Length]; espere até não haver mais nenhum inimigo vivo; depois, descanse por restBetweenWaves segundos. Depois da última onda, o conjunto recomeça pela primeira, e Wave continua contando: 4, 5 e assim por diante.
  • Conte os inimigos vivos usando o evento Died: inscreva-se em OnEnable e cancele a inscrição em OnDisable. O spawner apenas lê o asset: no Editor, uma alteração feita em um asset enquanto o jogo está em execução permanece no asset depois de Play.

Pressione Play e sobreviva a algumas ondas; em seguida, clique em Check.

Experimente você mesmo

using UnityEngine;

public class WaveSpawner : MonoBehaviour
{
    // Uma aula posterior completa esta parte: envia as ondas para a arena.
}

Todas as lições de Arquitetura de jogos no Unity