1. はじめに
こんにちは!今回もUnityで2D脱出ゲームを作っていきます。
前回までに部屋の移動やアイテムボックスの作成、アイテムを取得する仕組みを実装しましたね。
今回は「ドアの開閉」と「鍵やパスワードを使ったロック解除」を実装して、脱出ゲームらしいギミックを作っていきます!
今回実装する機能
✅ クリックでドアを開閉
✅ 鍵を持っているとドアが開く
✅ パスワードを入力してロック解除
脱出ゲームでは「ただ部屋を移動するだけ」ではなく、鍵やパズルを解いて進む要素が大切です。
これらの仕組みを取り入れることで、より本格的な脱出ゲームに仕上げていきましょう!
それでは、まずは「ドアの作成」から始めます!
2. ドアを作成しよう
脱出ゲームでは、ドアを開けることがゴールの一つになります。そこで今回は、クリックすると開閉するドア を作成します。
ドアの作成手順は以下のようになります。
- 閉じたドアの作成
- 開いたドアの作成
- クリックで開閉できるようにする
2-1. 閉じたドアを作成する
まず、閉じた状態のドアを作成しましょう。
room1
の中にImage
を作成します。- 名前を
Door
に変更します。 Inspector
でSource Image
に 閉じたドアの画像 を設定します。Add Component
からButton
コンポーネントを追加します。

👉 この設定で、ドアをクリックできるようになりました!
2-2. 開いたドアを作成する
次に、ドアを開いた状態の画像も作成します。

Door
をCtrl+D
で複製します。- 複製したオブジェクトの名前を
Door (Open)
に変更します。 Inspector
のSource Image
を 開いたドアの画像 に変更します。Door (Open)
を 非アクティブ(非表示) にしておきます。Inspector
でDoor (Open)
の チェックを外す(SetActive(false)
の状態にする)。

👉 これで、開いた状態のドアを用意できました!
2-3. クリックでドアを開閉する
作成した Door (Open)
をクリックすると表示され、Door
は非表示になるように設定します。
① スクリプトの作成
C#スクリプト
を新規作成します。- 名前を
Object
にします。 - 作成したスクリプトを
Door (Open)
にアタッチします。 - スクリプトを開き、以下のコードを入力します。
using UnityEngine;
public class Object : MonoBehaviour
{
public void OpenObject()
{
this.gameObject.SetActive(true);
}
public void CloseObject()
{
this.gameObject.SetActive(false);
}
}
② ボタンにスクリプトを設定
Door
の Buttonコンポーネント のOnClick()
にDoor (Open)
のOpenObject()
を設定。Door (Open)
の Buttonコンポーネント のOnClick()
にCloseObject()
を設定。

👉 これでクリックするとドアが開閉するようになります!
動作確認
ここまでの手順が完了したら、実際にプレイして動作を確認しましょう!
Door
をクリックするとDoor (Open)
が表示されるか?Door (Open)
をクリックするとDoor
に戻るか?
うまくいかない場合は、以下をチェックしてください。 ✅ Door (Open)
の SetActive
が false になっているか?
✅ OnClick()
に正しい関数が設定されているか?
2-4. まとめ
Door
(閉じたドア)を作成し、ボタン機能を追加Door (Open)
(開いたドア)を作成し、非表示に設定- スクリプトを作成し、クリックで開閉できるようにした

次のステップでは、鍵を使ってドアを開ける仕組みを作ります! 🔑
3. 鍵を使ってドアを開ける
脱出ゲームでは、「鍵を持っていないと開かないドア」を作るのが定番です。
今回は、プレイヤーが鍵を持っている場合のみドアを開けられる仕組みを実装します。
3-1. スクリプトを作成
まず、鍵を所持しているかを判定し、鍵を使ってドアを開くスクリプトを作成します。
① BlockObject
スクリプトの作成
- プロジェクトウィンドウ を右クリック →
Create
→C# Script
を選択 - 名前を BlockObject に変更
BlockObject
を開き、以下のコードを入力
using UnityEngine;
using UnityEngine.Events;
public class BlockObject : MonoBehaviour
{
public Item.Type type = default; // 使用するアイテムの種類
public UnityEvent ClearIvent = default; // アイテムを使った後の処理
public void Onthis()
{
// アイテムを持っているか判定
bool hasItem = ItemBox.instance.CanUseItem(type);
if (hasItem == true)
{
// アイテムを使用(消費)
ItemBox.instance.UseItem(type);
// クリアイベントを実行(ドアを開ける)
ClearIvent.Invoke();
}
}
}
3-2. 鍵の使用設定
スクリプトができたら、次は Door
に設定を行います。
① Door
にスクリプトをアタッチ
- Hierarchyウィンドウ で
Door
を選択 Inspector
で Add Component をクリックBlockObject
を検索し、追加
② 使用するアイテムを設定
BlockObject
コンポーネントのType
をKey
に設定
→Inspector
のType
ドロップダウンリストでKey
を選択
③ 鍵を使ったときの動作を設定
BlockObject
のClearIvent
にDoor (Open)
のOpenObject()
を設定
設定手順:Inspector
のClearIvent
の+
ボタン をクリックDoor (Open)
をHierarchy
からドラッグして設定No Function
をクリックしObject > OpenObject()
を選択

3-3. ボタンの設定
次に、鍵を持っている時だけドアを開けるようにボタンを設定します。
① Door
のボタンに Onthis()
を設定
Door
のInspector
でButton
コンポーネントを開くOnClick()
の+
ボタンをクリックDoor
をHierarchy
からドラッグNo Function
をクリックしBlockObject > Onthis()
を選択

👉 これで、プレイヤーが鍵を持っている時だけドアが開くようになります!
3-4. 動作確認
✅ 鍵を持っている場合
鍵
をクリックするとItemBox
に鍵が追加されるDoor
をクリックすると、Door (Open)
に切り替わる(ドアが開く!)
❌ 鍵を持っていない場合
Door
をクリックしても何も起こらない
🔍 Console
に Debug.Log()
を追加すると、アイテムがあるかどうかを確認できます。
public void Onthis()
{
bool hasItem = ItemBox.instance.CanUseItem(type);
Debug.Log("鍵を持っている? " + hasItem); // ← 追加
if (hasItem == true)
{
ItemBox.instance.UseItem(type);
ClearIvent.Invoke();
}
}
3-5. まとめ
BlockObject
スクリプトで「アイテムがある場合のみ使用できる」処理を実装ClearIvent
にDoor (Open)
のOpenObject()
を設定OnClick()
にBlockObject.Onthis()
を設定し、鍵がないと開かないドアを作成

これで、「鍵がないと開かないドア」 の仕組みが完成しました! 🎉
次は、4桁のパスワードロックを実装 して、より本格的なギミックを作りましょう!
4. 4桁のパスワードギミックを作成
脱出ゲームには、鍵だけでなくパスワードを入力してドアを開ける仕組みもよく使われます。ここでは 「4桁のパスワードを入力し、正解ならドアが開く」 というギミックを作成します。
4-1. UIでパスワード入力画面を作成
まず、パスワード入力画面のUIを作成していきましょう。
① パスワード入力画面のPanelを作成
Canvas
の中にPanel
を作成 し、名前をPasswordPanel
に変更Inspector
のRect Transform
でサイズを調整(例:Width: 800, Height: 400
)Panel
のImage
コンポーネントを 半透明(例:Alpha値 150) にして、パスワード画面らしくする
② パスワードのボタン配置
PasswordPanel
の子オブジェクトとしてImage
を作成(名前はPasswordGrid
にする)Inspector
でRect Transform
のサイズを調整Add Component
からGrid Layout Group
を追加Cell Size
(ボタンの大きさ):Width: 200, Height: 200
Spacing
(ボタンの間隔):X: 10, Y: 10
Child Alignment
:Middle Center
PasswordGrid
の子オブジェクトとしてButton
を4つ作成Button
の名前はPasswordButton0
,PasswordButton1
,PasswordButton2
,PasswordButton3
に変更- 各ボタンに
Text
を設定し、初期状態では"0"
にしておく

③ パスワード入力画面を閉じるボタンを作成
PasswordPanel
の子オブジェクトとしてButton
を作成(名前をClosePasswordPanel
に変更)Text
を"閉じる"
に変更PasswordPanel
は最初 非アクティブ にしておく(Inspector
でActive
をfalse
に)

4-2. スクリプトを作成
次に、パスワード画面の開閉処理をスクリプトで実装します。
- Panelに前に作成したObjectスクリプトをアタッチします。
③ OnClick()
の設定
ClosePasswordPanel
のOnClick()
にPasswordPanel
のCloseObject()
を設定

次は 「ボタンを押すと数字が変わる仕組み」 を作成していきます。これにより、プレイヤーがボタンを押すことでパスワードを入力できるようになります!
5. ボタンを押すと文字が変わる仕組み
脱出ゲームでは、4桁のパスワードを入力して鍵を解除するギミックがよく使われます。ここでは、ボタンを押すたびに表示される文字を変更する仕組み を作ります。
5-1. スクリプトを作成
まず、新しい C#スクリプト
を作成し、StringPassword
と名前を付けます。
作成したスクリプトを開き、以下のコードを入力してください。
using UnityEngine;
using UnityEngine.UI;
public class StringPassword : MonoBehaviour
{
// ボタンに表示する文字
public string chars = "0123456789";
// ボタンのテキストを管理する配列
public Text[] texts;
// 各ボタンが現在どの文字を表示しているかを管理する配列
public int[] nows;
public void ChangeText(int n)
{
// 次の文字へ変更
nows[n] += 1;
// 文字数を超えたら0に戻す(ループ)
if (nows[n] >= chars.Length)
{
nows[n] = 0;
}
// ボタンのテキストを更新
texts[n].text = chars[nows[n]].ToString();
}
}
スクリプトのポイント
chars
に表示可能な文字(今回は「あいうえお」)を設定texts
に 4つのボタンのTextコンポーネント を登録nows
配列で 各ボタンの現在のインデックスを管理ChangeText(int n)
で ボタンを押すたびに次の文字に変更- 文字の上限を超えたら最初の文字に戻る(ループ処理)
5-2. 設定方法(Inspector)
① StringPassword
スクリプトをアタッチ
- パスワード入力用の
Panel
にStringPassword
スクリプトをアタッチ Inspector
で以下の設定を行う
② texts
配列にボタンの Text
を設定
texts
のサイズを4
に設定- それぞれのスロットに 各ボタンの
Text
コンポーネント をドラッグ&ドロップで登録
③ nows
配列を設定
nows
のサイズを4
に設定- 各値を
0
に設定(初期状態)

④ 各ボタンの OnClick()
に ChangeText(int n)
を設定
- 各ボタンの
Inspector
を開く OnClick()
にStringPassword
のChangeText()
を設定- 引数(
int n
)には、それぞれ0, 1, 2, 3
を設定
(例:1番目のボタンはChangeText(0)
、2番目はChangeText(1)
)




👉 これで、各ボタンを押すと数字が切り替わるようになります!
動作確認
- ボタンを押すと「0→1→2→…→9→0」のようにループして変化する
- 4つのボタンがそれぞれ独立して動作する

これで、パスワードを入力するギミックの基本が完成しました!
次は、入力した文字が正解か判定する処理 を作成していきます。
6. 正解のパスワードを設定
脱出ゲームには「鍵」だけでなく、「パスワード入力」も定番のギミックです。
このセクションでは、4桁のパスワードを入力し、正解するとドアが開くように設定していきます。
6-1. 正解を判定するコード
まず、StringPassword
スクリプトに「入力されたパスワードをチェックする機能」を追加します。
以下のコードを StringPassword
に追記してください。
public string Answer;
public void CheckAnswer()
{
string answer = "";
foreach (Text text in texts)
{
answer += text.text;
}
if (answer == Answer)
{
Debug.Log("正解");
}
}
コードの解説
Answer
(正解のパスワード)をpublic string
で用意CheckAnswer()
で 全てのボタンの現在の文字を取得- 取得した文字列と
Answer
を比較- 一致すれば「正解」と判定
- 一致しなければ何も起こらない
6-2. 設定方法
- Inspector で正解のパスワードを設定
StringPassword
のAnswer
に「1234」や「ABCD」など、好きな4桁の答えを設定
- ボタンを押すたびに答えをチェック
- すべてのボタンの
OnClick()
にCheckAnswer()
を設定する
- すべてのボタンの

動作確認
- ゲームを実行
- 4つのボタンをクリックして文字を変更
- 正解の文字列にすると
Console
に「正解」が表示される
7. クリア処理を追加しよう(応用)
現在のコードでは、正解すると Debug.Log("正解");
が表示されるだけです。
ここに 「ドアが開く」 処理を追加してみましょう。
スクリプトに以下を追加
public UnityEvent OnCorrect;
public void CheckAnswer()
{
string answer = "";
foreach (Text text in texts)
{
answer += text.text;
}
if (answer == Answer)
{
Debug.Log("正解");
OnCorrect.Invoke();
}
}
設定方法
StringPassword
のInspector
でOnCorrect
にDoor (Open)
のOpenObject()
を設定- これで 正解のパスワードを入力すると、ドアが開く!
8. まとめ
今回の記事では、Unityで2D脱出ゲームにドアの開閉、鍵を使ったロック解除、4桁のパスワードロックを実装する方法を解説しました。
🔹 クリックでドアを開ける処理Door
と Door (Open)
を用意し、クリックすると Door (Open)
をアクティブにすることで、シンプルな開閉システムを作成しました。
🔹 鍵を使用してドアを開ける処理BlockObject
スクリプトを作成し、ItemBox
と連携させることで、「鍵を持っているときだけドアを開ける」というロック解除の仕組みを作りました。
🔹 4桁のパスワードロックの実装
ボタンを押すとテキストが切り替わり、正しいパスワードを入力するとクリアできる仕組みを StringPassword
スクリプトで実装しました。

これで、「アイテムを取得 → ドアを開ける → パスワードを解除する」 という、脱出ゲームに欠かせない基本的な要素を作ることができました。
よくある質問(FAQ)
- Qパスワードを数字のみにしたい
- A
chars
を"0123456789"
に設定すると数字だけになります。
- Q鍵がなくてもドアが開く
- A
BlockObject
のOnthis()
でCanUseItem()
の判定が正しく動いているか確認してください。
- Qクリックでドアが開かない
- A
Door (Open)
のInspector
でActive
がfalse
になっているか確認してください。