Menu
CoddyTech

Ondas

Lição 4 de 18 do curso Jogo de Unity: Defesa de Torres da Coddy.

Os inimigos vêm em ondas: um grupo de um mesmo tipo, espaçados ao longo do caminho, e então uma pausa antes do próximo grupo. Uma onda consiste em alguns números, então é uma classe [System.Serializable], e o spawner mantém uma List<Wave> que o Inspector exibe como linhas a serem preenchidas. Sem [System.Serializable], o Unity não consegue salvar uma Wave, o Inspector não exibe a lista, e ela permanece vazia.

A temporização é feita com uma coroutine: um loop que gera inimigos e, em seguida, usa new WaitForSeconds(...) para aguardar sem interromper o restante do jogo. Um espetáculo de fogos de artifício funciona da mesma forma com suas salvas, com uma pausa após cada uma:

IEnumerator Show()
{
    foreach (Salvo salvo in salvos)
    {
        for (int i = 0; i < salvo.rockets; i++)
        {
            Instantiate(rocketPrefab, launcher.position, Quaternion.identity);
            yield return new WaitForSeconds(salvo.gap);
        }
        yield return new WaitForSeconds(pause);
    }
}

Agora, os inimigos são prefabs. Os campos de um prefab só podem apontar para assets e para objetos dentro do prefab, então o array waypoints de um novo inimigo fica vazio. O spawner controla o caminho e o passa a cada inimigo logo após Instantiate. Instantiate retorna o tipo que recebe, então, com um campo de prefab do tipo Enemy, ele retorna o novo Enemy, pronto para ser configurado.

challenge icon

Desafio

Fácil

Grunt e Runner agora são prefabs, junto com um Tank e um Boss que têm seus próprios EnemyData. O objeto Spawner fica em WP0. Envie os inimigos em ondas:

  1. Em Wave.cs, crie Wave como uma classe serializável com os campos públicos enemy (um Enemy: o prefab), count (um int) e spacing (um float, os segundos entre dois inimigos).
  2. Em WaveSpawner, adicione três campos privados serializados: waves (uma List<Wave>), waypoints (um array de Transform) e timeBetweenWaves (um float).
  3. A partir de Start, execute uma coroutine que percorra as ondas em ordem. Para cada uma: espere timeBetweenWaves, registre o número da onda começando em 1, como Wave 1, depois crie seus count inimigos no primeiro waypoint, atribua a cada um deles waypoints e espere spacing após cada inimigo.
  4. Após a última onda, registre All waves sent.

O Inspector preenche as oito ondas do jogo e uma pausa de 8 segundos. Pressione Play e veja as primeiras ondas chegarem; depois, Check.

Experimente você mesmo

using UnityEngine;

// Vem depois: envia os inimigos pelo caminho em ondas.
public class WaveSpawner : MonoBehaviour
{
}
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 Jogo de Unity: Defesa de Torres