敵のリスポーンを実装したい。でも、出現管理やメモリ管理が分からない。
多くの学生が最初に感じるのが、この疑問です。
実は、敵リスポーンは、出現管理とメモリ管理で実現できます。
この記事では、敵リスポーンの作り方として、出現管理・範囲判定・メモリ管理を解説します。
✨ この記事でわかること
- 出現管理の実装方法
- 範囲判定の実装方法
- メモリ管理の実装方法
- ObjectPoolとSpawnPointの使い方

敵リスポーンは、出現管理とメモリ管理で実現できます。まずは、基本的な構造から理解しましょう。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
出現管理の実装方法

出現管理の実装は、次の要素で構成します。
- 出現位置の定義
- 出現タイミングの管理
- 出現数の制限
これらを組み合わせることで、基本的な出現管理ができます。
出現管理では、「どこに出すか(出現位置)」と「いつ出すか(時間)」を分けて考えます。
まず、敵を出現させたい位置をあらかじめ登録しておき、敵が倒されたあと、一定時間が経過したら、その位置に敵を再配置するという流れです。
|
1 2 3 4 5 6 7 8 9 10 11 |
[SerializeField] Transform spawnPoint; [SerializeField] float respawnTime = 3f; [SerializeField] GameObject enemyPrefab; IEnumerator RespawnEnemy() { yield return new WaitForSeconds(respawnTime); Instantiate(enemyPrefab, spawnPoint.position, Quaternion.identity); } |
上の例では、
- spawnPoint で 出現位置 を管理
- respawnTime で 出現タイミング を管理
しています。

実際のゲームでは、この処理を「敵が倒されたタイミング」で呼び出すことで、基本的なリスポーンを実現できます。
範囲判定の実装方法

範囲判定では、「プレイヤーが近くにいるときだけ敵を出現させる」ことで、無駄な出現や処理を減らします。
実装の流れは、次の3ステップです。
- プレイヤーと出現位置の距離を計算する
- その距離が「何メートル以内か」をしきい値で判定する
- 範囲内にいるときだけ、敵を出現させる
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[SerializeField] Transform player; // プレイヤー [SerializeField] Transform spawnPoint; // 敵の出現位置 [SerializeField] float appearDistance = 10f; // 出現させたい距離 [SerializeField] GameObject enemyPrefab; void Update() { // プレイヤーと出現位置の距離を計算 float distance = Vector3.Distance(player.position, spawnPoint.position); // 一定距離以内なら敵を出現させる if (distance <= appearDistance) { SpawnEnemy(); } } void SpawnEnemy() { Instantiate(enemyPrefab, spawnPoint.position, Quaternion.identity); } |
上の例では、
Vector3.Distanceで、プレイヤーと出現位置の距離を計算appearDistanceで、「何メートル以内なら出すか」のしきい値を管理- 条件を満たしたときだけ
SpawnEnemy()を呼び出し
という流れになっています。
まずはこのように「距離を測って、しきい値と比べるだけ」のシンプルな範囲判定から始めると、仕組みが理解しやすくなります。

範囲判定では、「常に処理する」のではなく、「近くに来たときだけ処理する」ようにするのがポイントです。
はじめは距離での判定だけ実装してみて、慣れてきたら「画面外では処理しない」などの応用に広げていきましょう。
メモリ管理の実装方法

メモリ管理では、「敵を毎回生成・削除しない」ことが重要です。
毎回 Instantiate と Destroy を繰り返すと、処理が重くなったり、カクつきの原因になります。
そこで、あらかじめ敵をまとめて作っておき、必要なときだけ再利用する仕組みが ObjectPool です。
メモリ管理の基本的な流れは、次の3つです。
- 最初に、敵オブジェクトをまとめて生成しておく
- 出現させるときは、プールから「未使用の敵」を取り出す
- 倒された敵は削除せず、非表示にしてプールに戻す
この流れを作っておくことで、敵リスポーンを繰り返しても処理が安定しやすくなります。
この EnemyPool を使うと、メモリ管理の流れが分かりやすくなります。
Awake()で、敵をあらかじめ複数体生成しておくSpawnEnemy()で、「非アクティブな敵」を探して再利用するDespawnEnemy()で、倒された敵をSetActive(false)にしてプールに戻す
ゲーム中では、敵が倒されたタイミングで DespawnEnemy() を呼び出し、次に出現させたいときに SpawnEnemy() を呼び出すだけで、生成と削除を繰り返さずにリスポーンを実現できます。
ObjectPoolとSpawnPointの使い方

敵リスポーンを「それっぽく」動かすために重要なのが、ObjectPool と SpawnPoint の役割を分けて使うことです。
この2つは似ているようで、担当している仕事がまったく違います。
| 仕組み | 何を管理する? | 役割 |
| ObjectPool | 敵オブジェクトそのもの | 何体の敵を使い回すかを管理する |
| SpawnPoint | 敵を出現させる位置 | どこに敵を出すかを管理する |
ObjectPool は「敵をどう管理するか」、SpawnPoint は「敵をどこに配置するか」を決めるための仕組みです。
この2つを組み合わせることで、敵の出現処理を次のように整理できます。
- プレイヤーが近づいたかをチェックする(範囲判定)
- 出現させたい SpawnPoint を選ぶ
- ObjectPool から使用可能な敵を取得する
- 選んだ SpawnPoint の位置に敵を配置して有効化する
この流れができると、
- 敵の数を増やしても、処理が重くなりにくい
- 出現位置を変えるだけで、ステージの印象を変えられる
- 後から条件や演出を追加しやすくなる
といったメリットがあります。
まずは、
- SpawnPointをいくつか配置する
- ObjectPoolで敵を使い回す
この2つだけを意識して実装してみてください。

敵がスムーズに出現・消滅するだけでも、ゲームらしさは一気に上がります。
敵リスポーン実装のポイント(全体の流れ)

実装のポイントは、次の通りです。
- STEP1SpawnPointを配置
敵の出現位置にSpawnPointを配置します。
- STEP2ObjectPoolを実装
敵の再利用のためにObjectPoolを実装します。
- STEP3範囲判定を実装
プレイヤーが一定範囲内にいるときだけ、敵を出現させます。
- STEP4出現管理を実装
出現タイミングと出現数を管理します。
この順番で進めれば、基本的な敵リスポーンが完成します。
ObjectPoolを使うことで、メモリを効率的に管理できます。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
実践的な敵リスポーン制作を学ぶには

ここまで、敵リスポーンの作り方について解説してきました。
敵リスポーンは、出現管理とメモリ管理で実現できます。
Unity入門の森では、Unityを使ったアクションゲームの作り方を、基礎から完成まで丁寧に解説しています。
コードの意味から、なぜその実装方法を選ぶのかまで、しっかり理解できる内容になっています。
アクションゲーム制作に特化した講座なら、効率的にスキルアップできます。
ゲーム制作でスキルを上げたい方は、ぜひチェックしてみてください。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
まとめ

敵リスポーンの作り方について解説しました。
要点のまとめ
- 出現管理は、出現位置と出現タイミングを管理する
- 範囲判定は、プレイヤーが一定範囲内にいるときだけ、敵を出現させる
- メモリ管理は、ObjectPoolを使うことで、効率的に管理できる
- ObjectPoolとSpawnPointを使うことで、より効率的な実装ができる
基本を押さえれば、あとは応用していくだけです。
まずは、シンプルなリスポーンから始めてみてください。
動かしながら理解を深めていくのが、上達への近道です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる



コメント