Uma onda
Lição 5 de 25 do curso Jogo de Unity: Defesa de Torres da Coddy.
O Grunt e o Runner agora são prefabs, junto com um Tank e um Boss, e um Spawner fica no WP0. Uma onda consiste em alguns números: qual inimigo, quantos e qual o intervalo entre eles. Por isso, Wave é uma classe [System.Serializable], e o spawner mantém uma List<Wave> que o Inspector preenche com as oito ondas do jogo. Sem [System.Serializable], o Unity não consegue preencher a lista, e ela fica vazia.
Gerar inimigos com intervalos é uma coroutine: yield return new WaitForSeconds(...) espera sem parar o jogo. Um prefab não pode apontar para os waypoints da cena, então o spawner entrega a cada novo inimigo os seus próprios logo após Instantiate:
Enemy enemy = Instantiate(wave.enemy, waypoints[0].position, Quaternion.identity);
enemy.waypoints = waypoints;
yield return new WaitForSeconds(wave.spacing);Desafio
FácilEnvie a primeira onda de Grunts pelo caminho.
- Em
Wave.cs, coloque[System.Serializable]emWave, compublic Enemy enemy;,public int count;epublic float spacing;. - Em
WaveSpawner, adicione[SerializeField] private List<Wave> waves;e[SerializeField] private Transform[] waypoints;. - Em
Start, execute uma coroutine que gerewaves[0].countinimigos como acima.
Pressione “Jogar”: seis Grunts avançam, com 1.2 segundos de intervalo. Depois, pressione “Verificar”.
Experimente você mesmo
using UnityEngine;
// Vem depois: envia os inimigos pelo caminho em ondas.
public class WaveSpawner : MonoBehaviour
{
}
Todas as lições de Jogo de Unity: Defesa de Torres
Pratique por conta própria: Playground de Unity