Menu
CoddyTech

敵のウェーブ

CoddyのUnityジャーニー「Unityにおけるゲームアーキテクチャ」セクションの一部。レッスン 44/50。

challenge icon

チャレンジ

中級

敵はウェーブごとに現れるようになり、ウェーブはデータとして管理されます。これまでのレッスンで作ったものはすべて残してください。アリーナ自体には敵がいなくなりました。Grunt と Dasher のプレハブにはスクリプトが設定され、四隅には4つのスポーン地点があり、中央の Spawner オブジェクトには WaveSpawner スクリプトが設定されています。

  • WaveSet.cs に、public Enemy enemy(プレハブ)、public int count、public float spacing を持つ [System.Serializable] クラス Wave を追加します。WaveSet は [CreateAssetMenu] を持つ ScriptableObject で、public List<Wave> waves と public float restBetweenWaves を持ちます。シーンの Arena アセットには3つのウェーブ(グラント3体を0.5秒間隔、ダッシャー2体を1秒間隔、グラント5体を0.4秒間隔)と、2秒の休憩時間を設定します。
  • Enemy に public static event Action<Enemy> Died を追加し、敵が破棄される直前に、その敵を渡してイベントを発生させます。
  • WaveSpawner には、Inspector から設定する waveSet と spawnPoints、およびプレイ中のウェーブ番号を表す public int Wave { get; private set; } を用意します。Start からコルーチンを実行し、アセット内のウェーブを順番に進めます。各ウェーブでは、Wave に1を加えて、Wave 1 のようにログを出力します。ウェーブの count で指定された数の敵を、spacing 秒間隔でスポーンさせます。敵 i(0から開始)は spawnPoints[i % spawnPoints.Length] に出現させます。生きている敵がいなくなるまで待ってから、restBetweenWaves 秒間休憩します。最後のウェーブの後は、セットの最初から再開し、Wave のカウントは続きます。つまり、4、5と増えていきます。
  • Died イベントを使って生存中の敵の数を数えます。OnEnable でイベントを登録し、OnDisable で登録を解除します。Spawner はアセットを読み取るだけです。Editor でゲームの実行中にアセットを変更した場合、Play 終了後もその変更はアセットに保持されます。

Play を押して、いくつかのウェーブを生き延びてから、Check を押してください。

自分で試してみよう

using UnityEngine;

public class WaveSpawner : MonoBehaviour
{
    // 後のレッスンでここを実装します。ウェーブをアリーナに送り込みます。
}

Unityにおけるゲームアーキテクチャのすべてのレッスン