🎮 Unity6 を使った「1つのシーンで完結する2D脱出ゲーム講座」第5回です。
今回は 背景切替時にオブジェクトをリセットするインターフェース(IResettable) の実装方法を解説します。
🎥 動作例動画
✅前回の記事はこちら👇
インターフェースで共通リセット処理を実装
脱出ゲームでは、背景を切り替えることが頻繁にあります。
その際、扉やギミックが勝手に開いたままだと不便ですよね。
そこで、背景が切り替わったタイミングで全てのギミックをリセットする仕組み を作ります。
IResettable.cs を作成
public interface IResettable
{
void ResetObject();
void ReStart();
}
📝 このスクリプトは どこにもアタッチしません。
他のスクリプト側で継承して使います。
ToggleObjectを IResettable 対応にする
既存の ToggleObject に以下のメソッドを追加します。
public class ToggleObject : MonoBehaviour, IResettable
{
// …既存のToggleObject コード
// 背景切り替え時に状態リセット
public void ResetObject()
{
isStateA = true; // 初期状態に戻す
if (imageA != null) imageA.SetActive(true);
if (imageB != null) imageB.SetActive(false);
}
// ゲーム全体初期化時に呼ばれる
public void ReStart()
{
ResetObject();
}
👆クラス名の MonoBehaviour の後ろに , IResettable を追記します。
BackgroundManager にリセット処理を追加
ResetAllObjects(背景切替え用)
private void ResetAllObjects()
{
// シーン内のすべての MonoBehaviour(非アクティブ含む)を取得
var allBehaviours = Resources.FindObjectsOfTypeAll<MonoBehaviour>();
foreach (var behaviour in allBehaviours)
{
// IResettable を実装していて、シーン内のオブジェクトのみ対象
if (behaviour is IResettable resettable &&
behaviour.gameObject.scene.isLoaded)
{
resettable.ResetObject();
}
}
}
SetBackground に追加
背景が切り替わるたびにオブジェクトを元に戻すためを SetBackground の最初に呼び出します。
public void SetBackground(BackgroundType type)
{
// 背景切替前にオブジェクトを初期化
ResetAllObjects();
// …既存の背景切替処理
}
動作チェック
- 背景を切り替えると、扉やギミックが 初期状態に戻る
- ToggleObject を継承した全てのオブジェクトに適用可能
まとめ
- IResettable インターフェース を作成することで、背景切替時にオブジェクトを共通リセット可能
- ゲーム初期化やステージリセットにも便利
✅次回は アイテムボックスの作成と、取得したアイテムを表示・使用できる仕組み を解説します。




コメント