【Unity6】2D脱出ゲームの作り方|ボタンを順番に押して解除するギミック

【Unity6】2D脱出ゲームの作り方|ボタンを順番に押して解除するギミック ゲームの作り方

🔍Unity6 を使った「1シーン完結型・2D脱出ゲーム制作講座」です。

今回は、複数のボタンを正しい順番で押すことで解除される、脱出ゲーム定番のギミックを作成します。

「順番入力パズル」は、金庫・扉・装置解除など幅広く使える便利な仕組みです。

この記事では、

  • ボタンの順番判定
  • 間違えた時のリセット処理
  • 解除後に操作できなくする方法
  • DoorBase と連携したドア解錠

まで、初心者向けにわかりやすく解説します。


✅DoorBase についてはこちら👇

【Unity6】2D脱出ゲームの作り方|ドアの開け閉めを共通スクリプトで制御する方法
Unity6を使った2D脱出ゲーム制作講座。ロック解除前はギミック拡大、解除後はドア開閉を行う共通スクリプト(DoorBase)の作り方と設定方法を解説します。

実装するギミック内容

🎥 動作例動画

  • 特定の順番でボタンを押す→ギミック解除
  • 解除後はパネル操作不可
  • ドアが解錠され、開閉可能になる

設計ポイント

👉 間違えたら即リセット
👉 ただし最初から押し直せる(詰まらない)

ヒエラルキーの構成

Stage
 └─ CenterDoorZoom(扉の拡大背景)
      ├─ Button1
      ├─ Button2
      ├─ Button3
      └─ Button4

ポイント

  • ギミックは 拡大背景(Zoom画面) に配置
  • 各ボタンは UI > Image + Button を使用

OrderButton.cs(各ボタン)

using UnityEngine;

public class OrderButton : MonoBehaviour
{
[SerializeField] private int buttonIndex; // このボタンの番号
[SerializeField] private OrderButtonManager manager;

private bool isLocked = false;

public void OnClick()
{
if (isLocked) return;

SEManager.Instance.PlayClickSE();
manager.OnButtonPressed(buttonIndex);
}

public void Lock()
{
isLocked = true;
}
}

OrderButtonManager.cs

※ 順番判定&ドア解除

using UnityEngine;

public class OrderButtonManager : MonoBehaviour
{
[SerializeField] private int[] correctOrder;// 正解の順番
[SerializeField] private OrderButton[] buttons;
[SerializeField] private DoorBase targetDoor;

private int currentIndex = 0;
private bool isCleared = false;

public void OnButtonPressed(int index)
{
if (isCleared) return;

if (index == correctOrder[currentIndex])
{
currentIndex++;

// 全部正解
if (currentIndex >= correctOrder.Length)
{
Clear();
}
}
else
{
// 間違えたら最初から
currentIndex = 0;
}
}

void Clear()
{
isCleared = true;

targetDoor.Unlock();
SEManager.Instance?.PlayUnLockSE();

foreach (var button in buttons)
{
button.Lock();
}
}
}

インスペクター設定

OrderButton.cs

各ボタン(Button1~4)に設定

  • ButtonIndex
    → ボタン番号(0~4)をそれぞれ入力
  • Manager
    → 親オブジェクトにOrderButtonManager.csを追加してアタッチ。
  • ボタンコンポーネントのクリック時に、OnClick()を設定

👉 Button1 を作成後、複製して Button2~4 を配置すると楽です。

OrderButtonManager.cs

・CorrectOrder→正解の順番に要素を追加
・Buttons→それぞれのボタン(OrderButton)を登録
・TargetDoor→開閉するドアにDoorBase.csを設定してアタッチ

その他の設定(DoorBase関連)

  • BackgroundTypeCenterDoorZoom を追加
  • BackgroundManager の Backgrounds に登録
  • DoorBase のLockedBackgroundID に CenterDoorZoom を設定

まとめ

今回は、順番にボタンを押して解除するギミックを実装しました。

  • クリックしたボタン番号を管理スクリプトに送る
  • 管理スクリプトで順番を確認
  • DoorBase と連携してドアを解錠

🎥 作成したギミックの動画はこちら👇

関連記事

【Unity6】2D脱出ゲームの作り方|ドアの開け閉めを共通スクリプトで制御する方法
Unity6を使った2D脱出ゲーム制作講座。ロック解除前はギミック拡大、解除後はドア開閉を行う共通スクリプト(DoorBase)の作り方と設定方法を解説します。
【Unity6】2D脱出ゲームの作り方|マークを揃えて解除するパネルギミック
Unity6を使った2D脱出ゲーム制作講座。クリックでマークが切り替わるパネルギミックを実装し、4つのマークを揃えて解除、DoorBaseと連携して扉を開閉する方法を解説します。
404 NOT FOUND | ゆーちゃんの脱出ゲームランド
遊べるScratch・Unity&攻略・作り方ガイド

コメント

タイトルとURLをコピーしました