(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);
}
}
(データベースの設定)
(実行結果)