(Unity6)同時に複数の敵をスポーンするシステム(データベース)

(1)WaveStatus

using UnityEngine;
using System;

[Serializable]
public class WaveStatus
{
    public GameObject botPrefab;
    public int count;
    public float rate;
}

(2)WaveX

using UnityEngine;
using System;
using System.Collections.Generic;

[Serializable]
public class WaveX
{
    public List<WaveStatus> waveStatuses = new List<WaveStatus>();
}

(3)WaveX

using UnityEngine;
using System.Collections.Generic;

[CreateAssetMenu(fileName = "WaveDatabase", menuName = "Scriptable Objects/WaveDatabase")]
public class WaveDatabase : ScriptableObject
{
    public List<WaveX> waveList = new List<WaveX>();
}

(4)WaveSpawner

using UnityEngine;
using System.Collections;

public class WaveSpawnerXXX : MonoBehaviour
{
    public WaveDatabase waveDatabase;
    private int currentWaveIndex = 0;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            if (waveDatabase == null || waveDatabase.waveList == null || waveDatabase.waveList.Count == 0)
                return;

            // 現在の要素を実行
            SpawnWave(currentWaveIndex);

            // 次回用にインデックスを更新(末尾まで行ったら0に戻る)
            currentWaveIndex = (currentWaveIndex + 1) % waveDatabase.waveList.Count;
        }
    }

    // 指定Waveの全ステータスを「同時に開始」する(そのステータスの敵を同時に生成する)
    public void SpawnWave(int waveIndex)
    {
        if (waveIndex < 0 || waveIndex >= waveDatabase.waveList.Count) return;

        // ★コードを短くするためのテクニック
        var wave = waveDatabase.waveList[waveIndex];

        // コルーチンを同時実行する(複数の敵が指定されたルールに従って同時に生成される)
        foreach (var status in wave.waveStatuses)
        {
            StartCoroutine(SpawnStatusRoutine(status));
        }
    }

    // 1種類のBotを、count体をrate秒間隔で出す
    private IEnumerator SpawnStatusRoutine(WaveStatus status)
    {
        for (int i = 0; i < status.count; i++)
        {
            Instantiate(status.botPrefab, transform.position, Quaternion.identity);

            yield return new WaitForSeconds(status.rate);
        }
    }
}

(実行結果)

・スペースキーを押すごとに、そのステータスの敵が、指定されたルールに従って同時生成される。