1. はじめに
脱出ゲームを作るときに「アイテムを拡大して詳しく見る」機能は欠かせませんよね!
例えば、鍵のような小さいアイテムを拾ったとき、「これってどんな形をしているんだろう?」とプレイヤーが気になる場面が出てきます。そこで、アイテムを選択し、+ボタンを押すことで拡大表示する「ズーム機能」を実装してみましょう。
この機能があると、プレイヤーはアイテムをじっくり観察できるようになり、
「鍵の裏に何か書いてある…?」といった謎解きのヒントを与えることができます。
また、アイテムを拡大するだけでなく、回転させていろんな角度から見られるようにすると、さらにゲームのクオリティがアップします!
この記事では、以下の内容を詳しく解説します。
- アイテムズーム用のUIパネルを作成する方法
- ズームしたアイテムを回転させる方法
- スクリプトを編集してズーム機能を実装する方法
- ズーム画面を閉じるボタンの設定方法
初心者の方でも手順通りに進めれば簡単に実装できるので、一緒に作っていきましょう!
2. ズーム用パネルの作成
アイテムをズーム表示するためのパネルを作成していきます。このパネルを使うことで、選択したアイテムを拡大表示し、さらに回転させることができるようになります。まずは基本となる ZoomCanvas を作成し、その中にズーム用のパネルを配置していきましょう!
1. Canvasの作成
ズーム用のUIを管理するために、Canvas を作成します。
- ヒエラルキー(Hierarchy)ウィンドウ で 右クリック →
UI→Canvasを選択 - 作成されたCanvasの名前を
ZoomCanvasに変更 - Inspector で以下の設定を変更
Render Modeを Screen Space – Camera に設定Render Cameraに MainCamera をドラッグ&ドロップPlane Distanceを 1 に設定(カメラとキャンバスの距離を調整)- Oder in Layerを1に設定
💡 Plane Distance を変更することで、Canvasとカメラの間隔を調整できます。1 に設定することで適切な位置に表示されます。
2. 背景パネルの作成
ズーム時に背景を暗くするための パネル(Panel) を作成します。
- ZoomCanvas の子オブジェクト として
UI→Panelを作成 - 名前を
BackGroundPanelに変更 BackGroundPanelのImageコンポーネントのColorを 透明 にするAlpha(透明度)を0に設定
この BackGroundPanel は、ズーム中にボタン操作などを制限するための透明なパネルとして機能します。
3. 黒い背景パネルの作成
ズーム時に画面を暗くするために、黒い背景を作成します。
BackGroundPanelの 子オブジェクト としてUI→Panelを作成- 名前を
BlackPanelに変更 BlackPanelのImageコンポーネントのColorを 黒(#000000) に変更- サイズを 画面全体を覆うように調整
Anchorを Stretch(全画面) に設定すると便利
💡 BlackPanel を表示することで、ズーム時に背景が暗くなり、ユーザーの視線をアイテムに集中させることができます。
4. ズームオブジェクトの親オブジェクトを作成
ズームするアイテムを表示するための 空のオブジェクト(Empty Object) を BlackPanel の前面に作成します。
- BlackPanel の子オブジェクトとして
Create Emptyを作成 - 名前を
ZoomObjParentに変更 RectTransformのPositionを調整し、画面中央に配置ZoomObjParentのScaleを適切なサイズに調整ZoomObjParentはBlackPanelに埋もれないよう、Z座標を調整(例:Z = -2 )

この ZoomObjParent にアイテムを配置することで、ズーム時にアイテムが表示される仕組みになります。
まとめ
ここまでの作業で、ズーム用のパネルが完成しました!
✅ ZoomCanvas → UIを管理するキャンバス
✅ BackGroundPanel → 透明な背景パネル(操作制限)
✅ BlackPanel → 画面を暗くする黒い背景
✅ ZoomObjParent → ズームアイテムを表示するオブジェクト

この後のステップでは、ズーム用のPrefabを作成し、スクリプトを実装していきます!
3. アイテムズーム用のPrefab設定
アイテムをズーム表示するために、事前にズーム用のPrefab(プレハブ)を作成しておきます。このPrefabを ZoomObjParent に配置することで、+ボタンを押したときに拡大表示されるようになります。
1. ズーム用Prefabの作成
まず、ズームしたいアイテム(例:鍵)のPrefabを作成します。
① 3Dモデルの準備
Hierarchyウィンドウで ズーム表示したいアイテム(鍵や道具など)を作成 します。- 例えば
3D Object→Cubeを選び、鍵のモデルを設定します。
- 例えば
- 既存の3Dモデル(アセットストアなどから取得したもの)がある場合、それを使用してもOKです。
② Prefab化
Projectウィンドウで 「Prefab」フォルダを作成。- 作成した3Dオブジェクトを
Prefabフォルダに ドラッグ&ドロップ して、Prefab化します。
3. ズーム表示時の調整
ズーム表示したときに、アイテムが適切な位置・サイズ・向きで表示されるように調整します。
① ZoomObjParent に配置
ZoomPanelスクリプトでZoomObjParentにPrefabが生成される ので、ここに配置されることを想定してサイズや角度を調整 します。(例:Scale,X400,Y400,Z400)
② アイテムの位置や角度の調整
ZoomPrefabをZoomObjParentに 手動で一度配置 して、適切なサイズや回転になるよう調整。- BlackPanelにめり込まないように
Zの位置を調整。 - ZoomObjParentを回転したときに見やすい角度になるか確認。
4. アイテムデータベースの編集
アイテムをズームできるようにするために、アイテムデータベースにズーム用のPrefabを設定できるようにします。
これにより、各アイテムごとに専用のズームオブジェクトを持たせることができます。
① Itemスクリプトを編集
まずは、 Item クラスにズーム用のPrefabを設定するための変数を追加します。
UnityのInspector上でPrefabを設定できるようにするために、 Serializable を指定しておきましょう。
🔹 修正するスクリプト: Item.cs
using System;
using UnityEngine;
[Serializable] // Inspectorで表示できるようにする
public class Item
{
// アイテムの種類
public enum Type
{
key, // 鍵
Cube, // 立方体
Circle, // 円形
// アイテムを追加する場合ここに書き足す
}
// タイプを持たせる
public Type type;
// アイテムの画像
public Sprite sprite;
// ズーム用のPrefab
public GameObject ZoomPrefab; // ← 追加
// コンストラクタ
public Item(Item item)
{
this.type = item.type;
this.sprite = item.sprite;
}
}
✅ GameObject ZoomPrefab; を追加することで、アイテムごとにズーム用のPrefabを持たせられるようになります。
② アイテムデータベースにズーム用Prefabを設定
次に、 New Item Database Entity の Inspector にズーム用Prefabを設定する項目が追加されていることを確認しましょう。
- Unityエディタで
New Item Database Entityを開く itemsのリストの各アイテムを開くZoomPrefabの項目に、ズーム時に表示させたいPrefabをドラッグ&ドロップで設定する

5. ズーム機能を実装するスクリプト
アイテムを選択した状態で「+ボタン」を押すと、そのアイテムがズーム表示される機能をスクリプトで実装していきます。ズームパネルを表示し、ズーム対象のアイテムを適切に配置する処理を作成します。
① ズームパネルのスクリプト作成
まず、ZoomPanel というスクリプトを作成し、ズームパネルの管理を行います。
スクリプトを作成
- プロジェクトウィンドウを右クリック
- 「Create」→「C# Script」 を選択
- スクリプト名を「ZoomPanel」に変更
スクリプトの内容
using UnityEngine;
public class ZoomPanel : MonoBehaviour
{
[SerializeField] GameObject backGroundPanel; // 背景パネル
Canvas canvas;
[SerializeField] Transform zoomObjParent; // ズームするオブジェクトの親オブジェクト
GameObject zoomItem; // ズーム表示するアイテム
public static ZoomPanel instance;
private void Awake()
{
instance = this; // インスタンス化
}
private void Start()
{
canvas = GetComponent<Canvas>();
HideZoomPanel(); // 最初は非表示にする
}
// +ボタンが押されたときの処理
public void OnClickZoom()
{
Item selectItem = ItemBox.instance.GetSelectItem();
if (selectItem == null)
{
return; // アイテムが選択されていなければ処理しない
}
backGroundPanel.SetActive(true); // 背景パネルを表示
ShowItem(); // アイテムを表示
}
// ズーム用のアイテムを表示する
void ShowItem()
{
if(zoomItem != null)
{
Destroy(zoomItem); // すでにある場合は削除
}
Item selectItem = ItemBox.instance.GetSelectItem();
zoomItem = ItemDatabase.instance.CreateZoomItem(selectItem.type); // アイテムを生成
zoomItem.transform.SetParent(zoomObjParent, false); // ズーム用の親オブジェクトに設定
}
// ズームパネルを非表示にする
public void HideZoomPanel()
{
backGroundPanel.SetActive(false);
}
// カメラの設定(ズーム時に使用)
public void setRenderCamera(Camera camera)
{
canvas.worldCamera = camera;
}
}
スクリプトのポイント
OnClickZoom()ItemBoxから選択中のアイテムを取得し、ズームパネルを表示します。backGroundPanel.SetActive(true);で背景パネルを有効化。
ShowItem()- すでにズーム表示しているアイテムがある場合は削除。
ItemDatabaseからアイテムのズームPrefabを取得して生成。zoomObjParentの子オブジェクトとして配置。
HideZoomPanel()backGroundPanel.SetActive(false);でズーム画面を非表示にする。
setRenderCamera(Camera camera)- ズームパネルがカメラを認識できるように設定。
②スクリプトの適用
作成した ZoomPanel スクリプトを ZoomCanvas にアタッチしてください。
インスペクターで設定する項目
- BackGroundPanel → ZoomCanvasの子オブジェクト(黒いパネル)
- ZoomObjParent → BlackPanelの子オブジェクト(アイテムを表示するためのオブジェクト)

6. +ボタンとズーム解除ボタンの設定
アイテムを選択したときに**+ボタンを押すことでアイテムをズームできるようにし、ズーム画面を閉じるためのズーム解除ボタン(CloseButton)**を作成します。
1. +ボタンにスクリプトを設定
+ボタン をクリックすると ZoomPanel.OnClickZoom() が実行されるように設定します。
ZoomButtonを選択。InspectorのButtonコンポーネント内のOnClick()を開く。- 「+」ボタンをクリックして、新しいイベントを追加。
ZoomPanelをヒエラルキーからドラッグしてOnClick()のオブジェクトに設定。OnClick()のドロップダウンメニューからZoomPanel -> OnClickZoom()を選択。
✅ これで、+ボタンを押すと選択中のアイテムがズームされるようになります!

2. ズーム解除ボタン(CloseButton)の作成
- ヒエラルキー(Hierarchy)ウィンドウで
BlackPanelを選択。 BlackPanelの子オブジェクトとしてButtonを追加(右クリック → UI → Button)。- 名前を
CloseButtonに変更。
3. ボタンのデザイン調整
InspectorのButtonコンポーネントを開く。Textの変更TextオブジェクトのTextを「X」にする。- または、
Imageコンポーネントを変更してアイコン風にする(例えば、白い「✖」マークの画像を設定)。
- サイズと位置の調整
Rect TransformのPosXとPosYを調整して、右上 に配置。

4. ズーム解除の処理を設定
CloseButtonを選択。InspectorのButtonコンポーネント内のOnClick()を開く。- 「+」ボタンをクリックして、新しいイベントを追加。
ZoomPanelをヒエラルキーからドラッグしてOnClick()のオブジェクトに設定。OnClick()のドロップダウンメニューからZoomPanel -> HideZoomPanel()を選択。

✅ これで、Xボタンを押すとズーム画面が閉じるようになります!
7. スクリプトの追加・編集
ここでは、アイテムズーム機能を実装するために、ItemDatabase、ItemBox、CameraManager のスクリプトを修正していきます。
ズームオブジェクトを適切に生成し、選択したアイテムを取得できるようにし、カメラの切り替えをスムーズに行う方法を解説します。
1. ItemDatabase スクリプトの修正
まず、ItemDatabase にズームオブジェクトを生成するメソッド CreateZoomItem() を追加します。
このメソッドは、選択したアイテムの ZoomPrefab を取得し、実際に生成する役割を持ちます。
using UnityEngine;
public class ItemDatabase : MonoBehaviour
{
// どこからでもアクセスできるようにする
public static ItemDatabase instance;
private void Awake()
{
instance = this;
}
[SerializeField] ItemDatabaseEntity itemDatabaseEntity = default;
// アイテムを生成するメソッド
public Item Spawn(Item.Type type)
{
for (int i = 0; i < itemDatabaseEntity.items.Count; i++)
{
Item itemData = itemDatabaseEntity.items[i];
if (itemData.type == type)
{
return new Item(itemData);
}
}
return null;
}
// **ズーム用アイテムを生成するメソッドを追加**
public GameObject CreateZoomItem(Item.Type itemType)
{
for (int i = 0; i < itemDatabaseEntity.items.Count; i++)
{
Item itemData = itemDatabaseEntity.items[i];
if (itemData.type == itemType)
{
return Instantiate(itemData.ZoomPrefab);
}
}
return null;
}
}
追加したポイント
✅ CreateZoomItem() を追加し、アイテムの種類 (Item.Type) を受け取って ZoomPrefab を生成する処理を実装
✅ Instantiate(itemData.ZoomPrefab); でプレハブをインスタンス化
✅ itemDatabaseEntity から一致するアイテムを検索し、該当する ZoomPrefab を返す
このメソッドを ZoomPanel の ShowItem() 内で使用し、選択したアイテムをズーム表示します。
2. ItemBox スクリプトの修正
次に、現在選択中のアイテムを取得するメソッド GetSelectItem() を 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;
}
//一度BackPanelを全て消す
for (int i = 0; i < slots.Length; i++)
{
slots[i].HideBackPanel();
}
//クリックしたスロットのBackPanelを表示する
slots[position].OnSelect();
//選択アイテムとして取得する
selectSlot = slots[position];
}
//アイテムを選択しているかを判定する関数
public bool CheckSelectItem(Item.Type useItemType)
{
if (selectSlot == null)
{
return false;
}
if (selectSlot.GetItem().type == useItemType)
{
return true;
}
return false;
}
public void UseSelectItem()
{
selectSlot.RemoveItem();
selectSlot = null;
}
public Item GetSelectItem()
{
if (selectSlot == null)
{
return null;
}
return selectSlot.GetItem();
}
}
追加したポイント
✅ GetSelectItem() を追加し、選択されているスロットからアイテムを取得する処理を実装
✅ selectSlot.GetItem(); で現在選択されているアイテムを返す
✅ selectSlot が null の場合は null を返し、選択中のアイテムがないことを示す
この GetSelectItem() は ZoomPanel の OnClickZoom() で呼び出され、+ボタンを押したときにズーム対象のアイテムを取得します。
3. CameraManager スクリプトの修正
最後に、ズーム機能の際に ズームパネルを非表示にする処理と、メインカメラとズームカメラの切り替え を実装します。
ズーム中は MainCamera を無効にし、 ZoomCamera を有効にすることで、ズーム専用のカメラが機能するようにします。
using UnityEngine;
public class CameraManager : MonoBehaviour
{
public static CameraManager instance;
[SerializeField] GameObject backButton =default;
[SerializeField] GameObject RightButton=default;
[SerializeField] GameObject LeftButton = default;
[SerializeField] Transform[] cameraPositions;
Camera zoomCamera = default;
Camera mainCamera = default;
int currentIndex = 0;
private void Awake()
{
instance= this;
}
private void Start()
{
mainCamera=Camera.main;
currentIndex= 0;
SetCameraPosition(currentIndex);
backButton.SetActive(false);
}
public void TurnRight()
{
currentIndex++;
if(currentIndex >= cameraPositions.Length)
{
currentIndex= 0;
}
SetCameraPosition(currentIndex);
}
public void TurnLeft()
{
currentIndex--;
if (currentIndex <= -1)
{
currentIndex = cameraPositions.Length-1;
}
SetCameraPosition(currentIndex);
}
public void OnBack()
{
backButton.SetActive(false);
LeftButton.SetActive(true);
RightButton.SetActive(true);
this.zoomCamera.gameObject.SetActive(false);
mainCamera.gameObject.SetActive(true);
ZoomPanel.instance.setRenderCamera(mainCamera);
}
void SetCameraPosition(int index)
{
Camera.main.transform.position = cameraPositions[index].position;
Camera.main.transform.rotation = cameraPositions[index].rotation;
}
public void SetZoomCamera(Camera zoomCamera)
{
this.zoomCamera = zoomCamera;
backButton.SetActive(true);
LeftButton.SetActive(false);
RightButton.SetActive(false);
Camera.main.gameObject.SetActive(false);
ZoomPanel.instance.setRenderCamera(zoomCamera);
}
}まとめ
✅ ItemDatabase に CreateZoomItem() を追加
✅ ItemBox に GetSelectItem() を追加
✅ CameraManager にズームパネルの表示・カメラ切り替え機能を追加

これで、ズーム機能の実装に必要なスクリプト修正が完了しました!
8. ズームしたアイテムを回転させる
アイテムのズーム機能が実装できたら、次はズームしたアイテムをマウス操作で回転できるようにしていきます。回転機能があると、プレイヤーがアイテムを360度確認できるので、隠されたヒントを発見しやすくなります。
アイテム回転用スクリプトの作成
ズーム中のアイテムをマウスドラッグで回転させるには、ZoomObjParent の Transform を変更するスクリプトを作成します。
1. 新しいスクリプトを作成
プロジェクトウィンドウを右クリック → 「Create」→「C# Script」 を選んで、新しいスクリプトを作成し、名前を ItemRotation にします。
作成した ItemRotation スクリプトを開いて、以下のコードを入力してください。
using UnityEngine;
public class ItemRotation : MonoBehaviour
{
[SerializeField] Transform zoomObjParent;
[SerializeField] Transform zoomCanvas;
// 回転の速度
public float speed = 100;
// マウスをドラッグしてズームしたアイテムを回転させる
private void Update()
{
if (Input.GetMouseButton(0))
{
float dy = -Input.GetAxis("Mouse X") * speed;
float dx = Input.GetAxis("Mouse Y") * speed;
// X軸とY軸の回転
zoomObjParent.RotateAround(transform.position, zoomCanvas.transform.rotation * Vector3.up, dy);
zoomObjParent.RotateAround(transform.position, zoomCanvas.transform.rotation * Vector3.right, dx);
}
}
}
2. スクリプトの解説
このスクリプトでは、Update() の中でマウスのドラッグ操作を検出し、それに応じて zoomObjParent を回転させています。
Input.GetMouseButton(0)
→ 左クリック(0)を押している間、マウスの動きを取得Input.GetAxis("Mouse X")
→ マウスの横方向の移動量を取得(右が正、左が負)Input.GetAxis("Mouse Y")
→ マウスの縦方向の移動量を取得(上が正、下が負)speed
→ 回転速度を調整するための変数。数値を大きくすると速く回転する
RotateAround() を使って、zoomCanvas の回転軸を基準にオブジェクトを回転させています。
3. ゲームオブジェクトにスクリプトを追加
作成した ItemRotation スクリプトを ZoomObjParent にアタッチします。
- ヒエラルキーウィンドウ で
ZoomObjParentを選択 - Inspector で
Add Componentをクリック ItemRotationを検索して追加
4. インスペクターで設定を行う
ZoomObjParent に ItemRotation スクリプトをアタッチしたら、Inspector で以下の設定を行います。
- ZoomObjParent にドラッグ&ドロップ
zoomObjParentのフィールドに ZoomObjParent を設定
- ZoomCanvas にドラッグ&ドロップ
zoomCanvasのフィールドに ZoomCanvas を設定
- 回転速度の調整
speedの値を100に設定(後で調整可能)
5. 動作確認と調整
ゲームを再生して、ズームしたアイテムをマウスドラッグで回転させてみましょう。
- 左クリックを押しながら マウスを左右に動かす → アイテムが水平方向に回転
- 左クリックを押しながら マウスを上下に動かす → アイテムが垂直方向に回転
もしアイテムが思うように回転しない場合は、以下の点をチェックしてください。
✔ ZoomObjParent の Z の位置を調整して BlackPanel にめり込まないようにする
✔ speed の値を変更して回転速度を調整する
✔ zoomCanvas の Transform の向きを確認する

これで、ズームしたアイテムをマウス操作で回転させる機能が追加できました!プレイヤーはアイテムを拡大表示しながら、好きな角度で確認できるようになります。
あわせて読みたい
- 🔑 Unity3D脱出ゲームの作り方②「鍵アイテムの作成と取得」
アイテム取得の基本を学べるステップ。アイテムズーム機能との連携にも役立ちます。 - 📦 Unity3D脱出ゲームの作り方③ – アイテムボックスの作成
ズーム対象のアイテムを格納するUIの作成に。 - 🔄 Unity3D脱出ゲームの作り方⑤|ドアをクリックで開く&アイテム選択機能
ズーム表示したアイテムを使う処理と関連性が高いです。 - 📷 Unity3D脱出ゲームの作り方⑥|ボタンでカメラを回転&ズームする方法
カメラズーム処理の基礎が学べ、⑦との違いを明確に理解できます。 - 🔢 Unity3D脱出ゲームの作り方⑧|4桁のパスワードでドアを開く
ズーム機能で拡大表示したパネルを操作してパスワードを入力するUIの応用例です。
よくある質問(FAQ)
- Qアイテムのズームがうまくいきません。何が問題でしょうか?
- A
ZoomPrefabがItemDatabaseEntityに正しく設定されているか確認してください。また、ZoomPanelにBackGroundPanelやZoomObjParentが正しくアタッチされているかチェックしましょう。
- Qズームしたアイテムを回転させると、回転軸がずれます。
- A
ZoomObjParentの初期位置をBlackPanelの前に適切に配置し、RotateAround()の軸計算を見直してください。
- Q+ボタンを押してもアイテムが表示されません。
- A
ItemBoxのGetSelectItem()が null を返していないか確認してください。アイテムを選択してからボタンを押しているかもチェックしましょう。









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