すべてのウェーブ
Coddyの「Unityゲーム:タワーディフェンス」コースのレッスン 6/25。
1つのウェーブだけではゲームになりません。コルーチンは各ウェーブの前にプレイヤーが準備できるよう間隔を空けながら、すべてのウェーブを順番に処理し、どのウェーブが始まるかをコンソールに表示します。この間隔には、ループの先頭にもう1つWaitForSecondsを追加します。
for (int i = 0; i < waves.Count; i++)
{
yield return new WaitForSeconds(timeBetweenWaves);
// ウェーブをログに記録し、その後、これまでどおり waves[i] をスポーンする
}ウェーブはリストでは0から数えますが、プレイヤー向けには1から数えるため、コンソールには"Wave " + (i + 1)と表示します。
チャレンジ
中級各ウェーブを送信し、それぞれの前に間隔を空けましょう。
WaveSpawnerに、[SerializeField] private float timeBetweenWaves = 8f;を追加します。wavesをループします。timeBetweenWavesだけ待ち、"Wave " + (i + 1)をログに出力してから、これまでと同じようにwaves[i]をスポーンします。- ループの後に、
All waves sentをログに出力します。
「プレイ」を押します。8秒後にConsoleにWave 1と表示され、Gruntがやって来ます。その後、「確認」を押します。
自分で試してみよう
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WaveSpawner : MonoBehaviour
{
[SerializeField] private List<Wave> waves = new List<Wave>();
[SerializeField] private Transform[] waypoints;
void Start()
{
StartCoroutine(RunWaves());
}
IEnumerator RunWaves()
{
Wave wave = waves[0];
for (int n = 0; n < wave.count; n++)
{
Enemy enemy = Instantiate(wave.enemy, waypoints[0].position, Quaternion.identity);
enemy.waypoints = waypoints;
yield return new WaitForSeconds(wave.spacing);
}
}
}
Unityゲーム:タワーディフェンスのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド