Menu
CoddyTech

すべてのウェーブ

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)と表示します。

challenge icon

チャレンジ

中級

各ウェーブを送信し、それぞれの前に間隔を空けましょう。

  1. WaveSpawnerに、[SerializeField] private float timeBetweenWaves = 8f;を追加します。
  2. wavesをループします。timeBetweenWavesだけ待ち、"Wave " + (i + 1)をログに出力してから、これまでと同じようにwaves[i]をスポーンします。
  3. ループの後に、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プレイグラウンド