(Unity6)スポーンシステムの実装(データベース)

(1)「WaveStatus」

using UnityEngine;
using System;

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

(2)「WabeDatabase」

using UnityEngine;
using System.Collections.Generic;

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

(3)「WaveSpawnerX」

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class WaveSpawnerX : MonoBehaviour
{
    public WaveDatabase waveDB;
    private float timeBetweenWaves = 5f;
    private float countDown;
    public int num;
    public Text countDownLabel;

    private void Start()
    {
        countDown = timeBetweenWaves;
        countDownLabel.text = countDown.ToString("n2");
    }

    private void Update()
    {
        if (countDown <= 0)
        {
            StartCoroutine(SpawnWave());
            countDown = timeBetweenWaves;
        }

        countDown -= Time.deltaTime;
        countDown = Mathf.Clamp(countDown, 0, Mathf.Infinity);

        countDownLabel.text = countDown.ToString("n2");
    }

    private IEnumerator SpawnWave()
    {
        // count・・・>何体生成するか?
        for (int i = 0; i < waveDB.waveList[num].count; i++)
        {
            SpawnBot();

            // rate・・・>どれくらいの時間間隔で生成するか?
            yield return new WaitForSeconds(waveDB.waveList[num].rate);
        }

        // 順送りのアルゴリズム
        num = (num + 1) % waveDB.waveList.Count;
    }

    void SpawnBot()
    {
        Instantiate(waveDB.waveList[num].botPrefab, transform.position, Quaternion.identity);
    }
}

(データベースの設定)


(実行結果)