+
*
+
ココ先生
ゲーム開発の案内役
この記事では 敵出現ウェーブ を、読んで終わりにせず、EnemyWavePacingDemo の小さな実装イメージまでつなげて案内します。
+
*
+
はじめちゃん
ゲームエンジン学習中
敵出現ウェーブと戦闘ペース設計の基本 を読む前に、まずUnity のどこを見ればよいかを確認したいです。
今日は「敵出現ウェーブ」を、まず何が変わるのか、次に画面で何を見せるのか、最後にどの値を確認するのか、という順番で読んでいきます。
大きなテーマに見えますが、今日は「EnemyWavePacingDemo」という小さな練習用の場面だけを作るのですね。何から始めればよいか分かりました。
少数出現を表示、Start Wave Buttonで進める、密度を上げるを確認の流れを追えば、記事の内容を自分のプロジェクトへ移しやすくなります。

完成イメージ
敵出現ウェーブの状態を分ける
少数出現、密度を上げる、休憩を挟む を別々の状態として扱い、今どの段階かを画面で確認できるようにします。
今どれくらい忙しいかをUIで伝える
Console だけではプレイヤーには見えません。TextMeshPro や Slider に waveIndex / spawnInterval / enemyCount を出して、判断材料を画面へ移します。
最小実装から広げる
まず EnemyWavePacingDemo を動かし、その後に本物の入力、通信、戦闘、保存処理などへ置き換えると、原因を見失いにくくなります。
導入
敵を一度に全部出さず、数体ずつ波のように出します。次の波までの時間も画面へ出します。
作るもの
Enemy Prefab と空の spawnPoint を置きます。WaveSpawner に waveLabel と nextWaveLabel を登録します。
一体ずつ出す
[SerializeField] private GameObject enemyPrefab; // 出現させる敵
[SerializeField] private Transform spawnPoint; // 敵の出現場所
IEnumerator SpawnWave(){ for(int i=0;i<count;i++){Instantiate(enemyPrefab,spawnPoint.position,Quaternion.identity);yield return new WaitForSeconds(interval);} }
次の波まで数える
IEnumerator WaitNext(){ for(float t=5;t>0;t-=Time.deltaTime){nextWaveLabel.text=$"次の波まで {t:0}";yield return null;} StartCoroutine(SpawnWave()); }
完成版
using UnityEngine;using TMPro;using System.Collections;public class WaveSpawner:MonoBehaviour{[SerializeField]GameObject enemyPrefab;[SerializeField]Transform spawnPoint;[SerializeField]TMP_Text nextWaveLabel;[SerializeField]int count=4;[SerializeField]float interval=1;void Start(){StartCoroutine(Loop());}IEnumerator Loop(){while(true){yield return SpawnWave();yield return WaitNext();}}IEnumerator SpawnWave(){for(int i=0;i<count;i++){Instantiate(enemyPrefab,spawnPoint.position,Quaternion.identity);yield return new WaitForSeconds(interval);}}IEnumerator WaitNext(){for(float t=5;t>0;t-=Time.deltaTime){nextWaveLabel.text=$"次の波まで {t:0}";yield return null;}}}
最後に整理すると、敵出現ウェーブでいちばん見失いやすい所はどこですか?
内部処理だけを追って、画面で伝える言葉を後回しにする所です。EnemyWavePacingDemoでは、まずプレイヤーに見える変化を先に決めます。
流れは「少数出現を表示」から始めて、「Start Wave Buttonで進める」で操作を入れる、と覚えればよいですか?
その通りです。その後に「密度を上げるを確認」で途中状態を見て、「休憩を挟むで結果を見る」で結果を確認します。順番を固定すると、失敗した場所も見つけやすくなります。
つまり、いきなり完成システムにせず、状態名、表示、値の変化を小さくそろえるのですね。
はい。最後は「敵出現ウェーブをわかりやすく考える」の考え方で、難しい処理をプレイヤーに伝わる短い合図へ置き換えられるか確認しましょう。
この記事のまとめ
敵を増やすだけで単調にならないように、出現場所、休憩時間、上限数、視認性の考え方を整理します。
大きな違いを生むのは、派手な性能よりも 毎日触れる環境を無理なく整えること です。見やすい画面と使いやすい道具がそろうと、学習や次の一歩を決めやすくなります。