【Unity6】2D脱出ゲームの作り方|マークを揃えて解除するパネルギミック

ゲームの作り方

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

今回は、クリックするとマークが切り替わるパネルギミックを作成し、
4つのパネルを特定のマークに揃えることでギミックを解除する仕組みを実装します。

また、前回作成した DoorBase スクリプトと連携し、
解除後にドアが開閉できるようにします。。

✅前回の記事はこちら👇

実装するギミック内容

🎥 動作例動画

  • パネルをクリックするとマークが切り替わる
  • 4つのパネルがすべて正解のマークになると解除
  • 解除後はパネル操作不可となり、1秒後、前の画面に戻る
  • ドアが解錠され、開閉可能になる
    👉 脱出ゲームで定番の 「マーク合わせパズル」 を実装します。

ヒエラルキーの構成

Stage
 └─ RightDoorZoom(扉の拡大背景)
      ├─ Panel1
      ├─ Panel2
      ├─ Panel3
      └─ Panel4

ポイント

  • ギミックは 拡大背景(Zoom画面) に配置
  • 各パネルは UI > Image + Button を使用
【Unity6】2D脱出ゲームの作り方|ギミック拡大画面にImageを使ってパネルを作成した画像

パネル画像の作成方法(Excelを使用)

① Excelでマーク画像を作成

  • テキストボックスを使用して記号(★・♣・▲ など)を入力
  • テキストボックスは 正方形 にする
  • フォントサイズを枠いっぱいに調整
【Unity6】2D脱出ゲームの作り方|Excelのテキストボックスでマークを作成した画像

② 画像として取り込み

  • Snipping Tool で切り取り
  • Unity にインポート
  • Sprite として使用

👉 複雑な画像編集ソフトを使わなくてもOKです。

PanelSwitch.cs(パネル切り替えスクリプト)

パネルをクリックすると、マークが順番に切り替わるスクリプトです。

using UnityEngine;
using UnityEngine.UI;

public class PanelSwitch : MonoBehaviour
{
public Image panelImage;
public Sprite[] patterns;
public int correctIndex; // 正解のマーク番号
public PanelPuzzleManager manager;

int index = 0;
bool isLocked = false;

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

index = (index + 1) % patterns.Length;
panelImage.sprite = patterns[index];

manager.CheckClear();
}

public bool IsCorrect()
{
return index == correctIndex;
}

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

PanelPuzzleManager.cs(正解判定&解除)

4つのパネルをチェックし、すべて正解ならドアを解除する管理スクリプトです。

using UnityEngine;
using System.Collections;

public class PanelPuzzleManager : MonoBehaviour
{
public PanelSwitch[] panels;
public DoorBase targetDoor;

bool isCleared = false;

public void CheckClear()
{
if (isCleared) return;

foreach (PanelSwitch panel in panels)
{
if (!panel.IsCorrect())
return;
}

// 全部正解!
isCleared = true;
StartCoroutine(OnUnlocked());

foreach (PanelSwitch panel in panels)
{
panel.Lock();
}

IEnumerator OnUnlocked()
{
targetDoor.Unlock();
BackgroundManager.Instance?.HideArrows();
SEManager.Instance?.PlayUnLockSE();

if (targetDoor != null)
targetDoor.Unlock();

yield return new WaitForSeconds(1f);

BackgroundManager.Instance?.GoBack();
}
}

インスペクター設定

PanelSwitch

各パネル(Panel1~4)に設定します。

  • PanelImage
    → 自分自身の Image をアタッチ
  • Patterns
    → 切り替えたいマークの数を設定
  • Patterns の要素
    → マーク画像を順番に設定
  • CorrectIndex
    → 正解となるマーク番号
  • Manager
    → PanelPuzzleManager をアタッチ(※後ほど作成
  • Button コンポーネントを追加
  • OnClick に PanelSwitch.OnClick() を設定

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

PanelPuzzleManager

RightDoorZoom(拡大背景) にアタッチします。

  • Panels
    → サイズを 4 に設定
    → Panel1~Panel4 を登録
  • TargetDoor
    → 前回記事で作成した DoorBase を設定

その他の設定

  • BackgroundTypeRightDoorZoom を追加
  • BackgroundManager の Backgrounds に登録
  • DoorBase のLockedBackgroundID に RightDoorZoom を設定

まとめ

今回は、マークを揃えて解除するパネルギミックを実装しました。

  • クリックでマーク切り替え
  • 正解判定は管理スクリプトで一括処理
  • DoorBase と連携してドアを解錠

この仕組みを使えば、記号・数字・色・アイコンなど、
さまざまな応用ギミックが作れます。

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

コメント

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