✅前回の記事はこちら👇
🎮 Unity6で進める
「1つのシーンで完結する2D脱出ゲーム講座」第15回(最終回)です!
前回の記事では👇
- タイトルに戻るボタンの実装
- アイテムボックスの初期化
- BGM・画面のフェードアウト処理
を解説しました。
今回はその続きとして、
- ✅ インターフェースを使ってギミックを一括リセットする方法
- ✅ ゲーム開始時の状態にアイテムを再配置する方法
を解説します。
各ギミックを一括でリセットする方法
本講座⑤回目の記事で作成した
オブジェクト初期化用インターフェースを使用します。
記事はこちらから👇
⑤|オブジェクトをリセットするインターフェース
IResettable の ReStart() を一括で呼び出す
タイトルに戻る際、
シーン内に存在するすべてのギミックを初期化します。
OptionManager.cs を修正
ReStartGame() メソッドに以下を追記します。
var allBehaviours = Resources.FindObjectsOfTypeAll<MonoBehaviour>();
foreach (var behaviour in allBehaviours)
{
if (behaviour is IResettable resettable &&behaviour.gameObject.scene.isLoaded)
{
resettable.ReStart();
}
}
ポイント解説
IResettableを実装しているクラスだけを対象にする- 現在ロードされているシーンのオブジェクトのみをリセット
- 新しいギミックを追加しても
👉IResettableを付けるだけで自動対応できる
各ギミックに IResettable を追加する
① StickRetrieve.cs(木の棒でハンドルを取るギミック)
クラス宣言に IResettable を追加します。
public class StickRetrieve : MonoBehaviour, IResettable
初期化処理を追加👇
public void ResetObject()
{
// 背景切り替え時は何もしない
}
public void ReStart() // ゲームリセット時
{
isCompleted =false;
faucetHandle_Back.SetActive(true);
faucetHandle_Front.SetActive(false);
foreach (var image in stickAnimationImages)
{
image.SetActive(false);
}
}
👉 ゲーム開始時の状態に完全に戻すのが目的です。
② FaucetController.cs(水道ギミック)
public class FaucetController : MonoBehaviour, IResettable
背景切り替え時👇
public void ResetObject()
{
SEManager.Instance.WaterStop(); //流水音を止める
}
ゲームリセット時👇
public void ReStart()
{
isHandleInstalled = false;
handleSet.SetActive(false);
water.SetActive(false);
}
アイテムを「初期配置」に戻すための準備
蛇口ハンドルのように、
ゲーム開始時には存在しないアイテムを管理するため、
ItemData にフラグを追加します。
ItemData.cs にフィールド追加
public bool UseSpawnSystem =false;// スポーン管理対象
public bool IsSpawned = false; // 出現済みか
public bool IsPicked = false; // 取得済みか
- デフォルトはすべて
false - スポーン管理が必要なアイテムのみ
→UseSpawnSystemにチェックを入れます

👆スポーン対象にしないと、出現前のアイテムが表示されてしまいます。
📌 ScriptableObject解説記事はこちら👇
⑥|アイテムスロットの作成とデータベース管理
StickRetrieve.cs を修正(ハンドル管理)
フィールド追加
public ItemData handleData;
インスペクターで蛇口ハンドル用の ItemData を指定します。
Start() / ReStart() に追加
handleData.IsSpawned = false;
handleData.IsPicked = false;
👉 ゲーム開始時はハンドルは未出現・未取得
ハンドル取得時の処理を追加
handleData.IsSpawned = true;
木の棒で取れる状態になったタイミングで
アイテムを出現可能にします。
ItemPickup.cs に SpawnSystem 対応を追加
OnClick() を修正
// スポーン管理アイテムは出現前なら取得不可
if (itemData.UseSpawnSystem && !itemData.IsSpawned) return;
itemData.IsPicked = true;
初期化処理の追加
public class ItemPickup : MonoBehaviour, IResettable
public void ResetObject()
{
}
public void ReStart()
{
itemData.IsPicked =false;
if (itemData.UseSpawnSystem)
{
gameObject.SetActive(itemData.IsSpawned);
}
else
{
gameObject.SetActive(true);
}
}
動作確認チェック
- ✅ タイトル戻る → 白フェード → タイトル画面
- ✅ クリアBGM → メインBGMに切り替わる
- ✅ 取得アイテムが初期配置に戻る
- ✅ 木の棒・水道ギミックが初期状態に戻る
まとめ
今回はゲームデータをリセットしてタイトルに戻る②として、
- インターフェースによるギミック一括初期化
- アイテムのスポーン管理と再配置
- ゲームを完全に初期状態へ戻す仕組み
を解説しました。
これで🎉 「1つのシーンで完結する2D脱出ゲーム講座」は完結です!
今後、南京錠ギミック・扉のボタン・暗証番号ギミックなどは 別記事として追加予定です。
【Unity6】1つのシーンで完結する2D脱出ゲーム講座一覧はこちら
- ①|1つのシーンでタイトル・ゲーム画面・クリア画面を切り替える方法
- ②|UIボタンで背景を切り替える方法
- ③|オブジェクトをクリックして拡大画面に切り替える方法
- ④|2段階拡大とクリックでオブジェクトを動かす共通スクリプト
- ⑤|オブジェクトをリセットするインターフェース
- ⑥|アイテムスロットの作成とデータベース管理(ScriptableObject)
- ⑦|アイテムボックスを管理するスクリプトを作る
- ⑧|アイテム選択枠と詳細画面の表示方法
- ⑨|選択したアイテムを使ったギミックの実装①(木の棒を使う)
- ⑩|選択したアイテムを使ったギミックの実装②(水道の水を流す)
- ⑪|効果音を管理するSEマネージャーを作ろう
- ⑫|オプション画面でBGM・SEの音量をスライダー調整する方法
- ⑬|画面フェード(白フェード)を追加して演出を強化する方法
- ⑭|ゲームデータをリセットしてタイトルに戻る①
- ⑮|ゲームデータをリセットしてタイトルに戻る②


コメント