1. はじめに
Unityで脱出ゲームを作るときに欠かせない要素のひとつが「ドアの開閉」と「アイテムを使ったギミック」です。例えば、プレイヤーがドアをクリックすると開く仕組みや、特定のアイテム(鍵など)を持っているときだけドアが開くシステムを実装することで、よりリアルなゲーム体験を提供できます。
この記事では、クリックでドアを開く方法と、アイテムスロットを活用して鍵を使った開閉システムを作成する手順を詳しく解説します。具体的には、以下の流れで進めていきます。
✅ ドアの開閉アニメーションを作成
✅ スクリプトでドアをクリックすると開く機能を追加
✅ アイテムスロットの選択機能を実装
✅ 鍵を持っている場合のみドアが開くように設定
これらの機能を実装することで、プレイヤーがアイテムを使ってドアを開く、脱出ゲームらしい仕組みを作ることができます!初心者向けに分かりやすく解説していくので、一緒に進めていきましょう!
2. ドアの開閉アニメーションを作成
脱出ゲームでは、ドアをクリックしたら開くという動作が必要になります。そこで、まずはドアが開くアニメーションを作成していきましょう。UnityのAnimationウィンドウを使うことで、スクリプトを使わずに簡単にアニメーションを作成できます。
2.1 アニメーションのウィンドウを開く
まず、UnityのAnimationウィンドウを開きます。
- ヒエラルキー(Hierarchy)ウィンドウでドアのオブジェクトを選択
- 上部メニューの
Window → Animation → Animationをクリック - すると、Animationウィンドウが開きます

このウィンドウでは、オブジェクトの動きや回転、スケールなどを記録し、アニメーションを作成することができます。
2.2 ドアの待機アニメーション(DoorIdle)を作成
まずは、ドアが何もしていない状態(待機状態)のアニメーションを作成します。
- Animationウィンドウの「Create」ボタンをクリック
DoorIdle.animという名前で.animファイルを作成- 赤い丸の録画ボタン(Recordボタン)をクリック
- インスペクター(Inspector)ウィンドウでドアの
Transformを少し変更(例:位置を少し動かして戻す) - 0秒のキーフレームが自動で作成される
- 赤い録画ボタンを再度クリックして停止
これで、「待機状態のアニメーション」が作成されました。
2.3 ドアが開くアニメーション(DoorOpen)を作成
次に、ドアが開く動きを作成します。
- Animationウィンドウの「Create New Clip」ボタンをクリック
DoorOpen.animという名前で.animファイルを作成- 赤い丸の録画ボタンをクリック
- 0秒地点のキーフレームを作成
Transform → Rotation.Yを0に設定(ドアが閉じた状態)
- 1秒地点のキーフレームを作成
Transform → Rotation.Yを75に変更(ドアが開いた状態)
- 赤い録画ボタンを再度クリックして停止
- 再生ボタンを押して動作を確認
- 0秒から1秒にかけてドアがスムーズに開くかチェック!
💡 ポイント
Loop Timeのチェックを外す(InspectorウィンドウのAnimator設定)- これをしないとドアが何度も自動で開いてしまうので注意!
2.4 アニメーションを設定
作成したアニメーションをAnimatorに設定しましょう。
- ドアのオブジェクトを選択
- インスペクター(Inspector)ウィンドウで「Add Component」→「Animator」を追加
- 「Animator Controller」フィールドに新しい
DoorAnimatorを作成 - 作成した
DoorIdleとDoorOpenのアニメーションを設定DoorIdleをデフォルト状態にするDoorOpenはスクリプトで再生するのでTransition(遷移)は作成しない

これで、ドアのアニメーション作成は完了です!🎉
次のステップでは、スクリプトを使ってクリックでドアを開く処理を作成していきます。
3. ドアをクリックで開くスクリプトを作成
さて、ドアのアニメーションができたら、次は実際に クリックでドアを開くスクリプト を作っていきます!
アニメーション単体ではドアは勝手に動かないので、スクリプトで操作できるようにしましょう。
3.1 Doorスクリプトを作成
まずは、ドアをクリックするとアニメーションを再生する スクリプト (Door.cs) を作成します。
- プロジェクトウィンドウを開く
Assetsフォルダ内で 右クリックCreate→C# Scriptを選択- 名前を Door にする
作成した Door.cs をダブルクリックして開き、次のコードを入力してください。
Door.cs
using UnityEngine;
public class Door : MonoBehaviour
{
[SerializeField] Animator animator = default;
public void Open()
{
animator.Play("DoorOpen");
}
}
3.2 スクリプトをドアにアタッチ
作成した Door スクリプトをドアに適用していきます。
- ヒエラルキーでドアのオブジェクトを選択
- Inspector を開き、
Door.csを ドラッグ&ドロップ して追加 Doorコンポーネント内のAnimatorに ドアのAnimator をドラッグ&ドロップで設定

3.3 ドアのクリックイベントを設定
次に、ドアをクリックすると Open() が実行されるようにします。
- ドアのオブジェクトを選択
- Inspectorウィンドウ の
Add Componentをクリック Event Triggerを検索し追加Add New Event Typeをクリックし、Pointer Clickを選択+ボタンを押して、新しいアクションを追加- ドアのオブジェクトを ドラッグ&ドロップ して設定
No Functionをクリックし、Door → Open()を選択

3.4 BoxColliderを設定
クリックを判定するために、ドアに BoxCollider を追加します。
- ドアのオブジェクトを選択
- Inspectorウィンドウ で
Add Component Box Colliderを検索し追加- サイズや位置を調整して、ドアの範囲をカバーするように設定
3.5 テストプレイ
ここまでできたら、実際に動作を確認しましょう!
- ゲームを再生
- ドアをクリック
- ドアがアニメーションとともに開けば成功!

これで、クリックでドアを開ける仕組みが完成しました!
次のステップでは、アイテム(鍵)を使って開ける仕組み を作っていきます。
4. アイテムスロットの選択機能を実装
脱出ゲームでは、プレイヤーがアイテムを取得し、必要なタイミングで使用する仕組みが重要です。例えば、鍵を拾ったらスロットに追加し、ドアを開けるときにその鍵を選択して使用するという流れですね。
この記事では、アイテムスロットを作成し、選択時に枠を表示する機能を実装します。これにより、プレイヤーが今どのアイテムを選択しているのかを明確にすることができます。
4.1 Slotスクリプトの作成・編集
まずは、アイテムのスロットを作成し、選択時に枠を表示する機能を追加しましょう。
① Slotスクリプトを編集
プロジェクトウィンドウを右クリックして「Create」→「C# Script」を選び、新しいスクリプトを作成します。名前は 「Slot」 にしましょう。(前の記事で作成済み)
作成したら、以下のコードを入力してください。
using UnityEngine;
using UnityEngine.UI;
public class Slot : MonoBehaviour
{
[SerializeField] GameObject backPanel = default; // 選択枠
[SerializeField] Image image = default; // アイテム画像
Item item = null; // アイテム情報
private void Start()
{
// 初期状態では枠を非表示
backPanel.SetActive(false);
}
// アイテムをスロットにセット
public void Set(Item item)
{
this.item = item;
image.sprite = item.sprite; // アイテムの画像を設定
}
// アイテムをスロットから削除
public void RemoveItem()
{
item = null;
image.sprite = null;
HideBackPanel(); // 枠も非表示にする
}
// アイテム情報を取得
public Item GetItem()
{
return item;
}
// スロットが空かどうか判定
public bool IsEmpty()
{
return item == null;
}
// アイテムを選択したときに枠を表示
public void OnSelect()
{
backPanel.SetActive(true);
}
// 選択を解除(枠を非表示)
public void HideBackPanel()
{
backPanel.SetActive(false);
}
}
② Slotスクリプトを設定
SlotをスロットのPrefabにアタッチします。(前の記事でアタッチ済み)InspectorにBackPanelを設定するフィールドが追加されるので、スロットのBackオブジェクトをドラッグ&ドロップして設定します。Imageのフィールドには、スロット内のアイテム画像を表示するUIのImageを設定してください。(前の記事で設定済み)
4.2 ItemBoxスクリプトの作成・編集
次に、アイテムスロットを管理する ItemBox スクリプトを作成し、プレイヤーがアイテムを取得・選択できるようにします。
① ItemBoxスクリプトを編集
プロジェクトウィンドウを右クリックして「Create」→「C# Script」を選び、新しいスクリプトを作成します。名前は 「ItemBox」 にしましょう。(前の記事で作成済み)
以下のコードを入力してください。
using UnityEngine;
public class ItemBox : MonoBehaviour
{
[SerializeField] Slot[] slots = default; // すべてのスロットを取得
public static ItemBox instance; // 他のスクリプトからアクセスできるようにする
Slot selectSlot; // 選択中のスロット
private void Awake()
{
instance = this; // シングルトンパターンを適用
}
// アイテムをスロットに追加
public void SetItem(Item item)
{
for (int i = 0; i < slots.Length; i++)
{
Slot slot = slots[i];
if (slot.IsEmpty()) // 空のスロットを探す
{
slot.Set(item);
break;
}
}
}
// スロットをクリックしたら選択状態にする
public void OnSlotClick(int position)
{
if (slots[position].IsEmpty()) return; // 空のスロットなら何もしない
// すべてのスロットの選択枠を非表示にする
for (int i = 0; i < slots.Length; i++)
{
slots[i].HideBackPanel();
}
// クリックしたスロットの枠を表示
slots[position].OnSelect();
selectSlot = slots[position]; // 選択状態として保存
}
// 選択中のアイテムが特定のタイプかどうか判定
public bool CheckSelectItem(Item.Type useItemType)
{
if (selectSlot == null) return false;
return selectSlot.GetItem().type == useItemType;
}
// 選択中のアイテムを使用して削除
public void UseSelectItem()
{
selectSlot.RemoveItem();
selectSlot = null;
}
}
② ItemBoxスクリプトを設定
ItemBoxスクリプトをItemBoxCanvasにアタッチします。InspectorにSlotsの配列フィールドが追加されるので、すべてのスロット(Slotオブジェクト)をドラッグ&ドロップして設定してください。
4.3 スロットのボタン設定
最後に、スロットをクリックすると OnSlotClick() が実行されるように設定します。
SlotのPrefabを開くAdd ComponentでButtonを追加On Click()の設定を開く- Prefabを保存して閉じる
- ヒエラルキーのスロットを選択
ItemBoxCanvasをドラッグ&ドロップItemBox.OnSlotClick(int)を設定- 数字入力欄にスロットの番号(0, 1, 2, 3, 4)を順番に入力
これで、スロットをクリックすると選択枠が表示され、現在選択しているアイテムを明確にできるようになりました!
テストプレイ
ここまで設定が終わったら、テストプレイをしてみましょう!
✅ スロットをクリックすると枠が表示されるか?
✅ アイテムを取得するとスロットに追加されるか?
✅ スロットが空のとき、枠が表示されないか?
これらが問題なく動作していれば成功です!

次のステップでは、このアイテム選択機能を活用して、「鍵を持っているときだけドアを開ける」機能を追加していきます!
5. 鍵を使ったドアの開閉機能を追加
さて、ここからは 鍵を使ったドアの開閉機能 を追加していきます!
これまでは ドアをクリックすると開く だけのシンプルな仕組みでしたが、今回は 鍵を持っているときだけ開くように制御 します。
これで、脱出ゲームらしい「鍵を探してドアを開ける」仕組みが完成します!
5.1 Door スクリプトを編集
まず、ドアの開閉処理に アイテムスロットの選択機能を組み込む ために、Door.cs を編集していきます。
🔹 やりたいこと
- 鍵(Key)を選択しているときだけ ドアが開く
- 鍵を使用するとアイテムボックスから削除される
では、スクリプトを編集しましょう!
✅ Door.cs を編集
以下のコードを入力してください。
using UnityEngine;
public class Door : MonoBehaviour
{
[SerializeField] Animator animator = default;
public void Open()
{
// 選択中のアイテムが "鍵" であるか確認
if (ItemBox.instance.CheckSelectItem(Item.Type.key))
{
// 鍵を使用してスロットから削除
ItemBox.instance.UseSelectItem();
// ドアの開閉アニメーションを再生
animator.Play("DoorOpen");
}
}
}
🎯 ポイント解説
ItemBox.instance.CheckSelectItem(Item.Type.key)で 鍵が選択されているかをチェック- 鍵が選択されていた場合
ItemBox.instance.UseSelectItem();で鍵を削除animator.Play("DoorOpen");でドアを開く
これで、鍵を持っていないと ドアが開かない仕組み ができました!
5.2 ゲームを実行して動作チェック
すべての設定が完了したら、いよいよ テストプレイ!
✅ 動作チェックリスト
- 鍵を拾うとスロットに表示されるか?
- スロットをクリックすると鍵が選択されるか?
- 鍵を選択した状態でドアをクリックすると開くか?
- 鍵を使用するとスロットから削除されるか?
- 鍵がない状態ではドアが開かないか?
脱出ゲームをもっと簡単に「Escape Development Kit」
ドアの開閉やアイテム管理など、脱出ゲームのシステムを一から作るのは大変ですよね?
そんな時に便利なのが 「Escape Development Kit」 です!✨
👉 Escape Development Kit – Asset Store
✅ ドアの開閉、アイテム管理、ギミック実装がすぐに使える!
✅ プログラミング不要!ドラッグ&ドロップで簡単カスタマイズ
✅ 制作時間を大幅に短縮!本格的な脱出ゲームが素早く完成!
「すぐに脱出ゲームを作りたい!」という人にピッタリのアセットです!
今すぐチェック👇
👉 Escape Development Kit – Asset Store
まとめ
これで、鍵を使ってドアを開けるシステムが完成しました!✨
🔹 今回やったこと
Door.csを編集して 鍵を持っているときだけ開く仕組み を作成Slotに アイテム選択機能を追加ItemBoxを活用して 鍵の有無をチェック&削除
これで、脱出ゲームらしい 「鍵を探して開ける」 という要素がしっかり組み込まれました!
次回は さらにゲームを面白くするための仕組み を追加していきます!💡
あわせて読みたい
- 🔑 Unity3D脱出ゲームの作り方②「鍵アイテムの作成と取得」
→ 鍵の取得とアイテム管理の基本を学びたい方はこちら! - 📦 Unity3D脱出ゲームの作り方③ – アイテムボックスの作成
→ ドア開閉の前段階、アイテム選択の基盤となるボックスの作り方を解説! - 🧠 Unity3D脱出ゲームの作り方④データベースの作成とアイテムボックスのスクリプト
→ 複数アイテムのデータ管理を効率化したい方におすすめ! - 🎥 Unity3D脱出ゲームの作り方⑥|ボタンでカメラを回転&ズームする方法
→ カメラ操作で臨場感を出したい方はこちら! - 🔍 Unity3D脱出ゲームの作り方⑦:アイテムズーム機能を実装しよう!
→ 拡大表示でアイテムのディテールを見せたい人にぴったり!
よくある質問(FAQ)
- Qドアのアニメーションが再生されません。どうすればいいですか?
- A
AnimatorのLoop Timeをオフにし、animator.Play("DoorOpen")の綴りが正しいか確認してください。
- Qアイテムがスロットにセットされません。どうしたらいいですか?
- A
ItemBox.instance.SetItem(item);のitemがnullになっていないかデバッグログで確認してください。
- Q鍵を持っているのにドアが開きません。原因は何ですか?
- A
Item.Type.keyのkeyがItemクラス内で定義されているものと一致しているか確認してください。









※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。