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.
Desafio
FácilGrunt 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:
- Em
Wave.cs, crie Wave como uma classe serializável com os campos públicosenemy(um Enemy: o prefab),count(um int) espacing(um float, os segundos entre dois inimigos). - Em
WaveSpawner, adicione três campos privados serializados:waves(umaList<Wave>),waypoints(um array de Transform) etimeBetweenWaves(um float). - A partir de
Start, execute uma coroutine que percorra as ondas em ordem. Para cada uma: esperetimeBetweenWaves, registre o número da onda começando em 1, comoWave 1, depois crie seuscountinimigos no primeiro waypoint, atribua a cada um deleswaypointse esperespacingapós cada inimigo. - 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
{
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.