1. はじめに
Unityで脱出ゲームを作るシリーズ第6回へようこそ!
今回はカメラを回転&ズームさせる仕組みを作っていきます。脱出ゲームでは、視点を自由に動かしてヒントを探したり、特定のオブジェクトを拡大して詳しく調べたりすることが重要ですよね。
そこで、この記事では以下のような機能を実装します。
✅ ボタンを押すとカメラが左右に回転
✅ オブジェクトをクリックするとズーム
✅ ズーム時に戻るボタンを表示
これらを実現するために、UIボタンとC#スクリプトを活用して、簡単にカメラを制御できるようにします。初心者でも理解しやすいように、コードと設定手順を詳しく説明していくので、一緒に作っていきましょう!
2. CanvasとPanelの作成
Unityでカメラを操作するボタンを作成するために、まず Canvas(キャンバス) と Panel(パネル) を作成します。ここでは、3つのパネルを用意し、それぞれカメラの回転やズーム解除の役割を持たせます。
① Canvasの作成
まず、UI要素を配置するためのキャンバス(Canvas)を作成します。
- ヒエラルキー(Hierarchy)ウィンドウで右クリック
- 「UI」→「Canvas」を選択
- Canvasの名前を「CameraMoveCanvas」 に変更
Canvasの設定
Canvasを選択し、インスペクター(Inspector)で次の設定を確認・変更してください。
Render Modeを Screen Space – Overlay にする(デフォルトのままでOK)Canvas ScalerのUI Scale Modeを Scale With Screen Size に変更
(ゲーム画面のサイズに合わせてUIがスケールするようにする)Reference Resolutionに 1920×1080 を入力
(画面サイズを固定する場合)
② Panelの作成
Canvasの中に、カメラを操作するためのパネルを3つ作成します。
- 「CameraMoveCanvas」を選択
- 右クリック →「UI」→「Panel」 を選択
- 作成した
Panelの名前を LeftPanel に変更 - 同じ手順で「RightPanel」「BackPanel」も作成
各パネルには、それぞれ次の役割を持たせます。
| パネル名 | 役割 | 色 | 初期表示 |
|---|---|---|---|
| LeftPanel | 左回転ボタン | 赤 | 表示 |
| RightPanel | 右回転ボタン | 青 | 表示 |
| BackPanel | ズーム解除ボタン | 黄 | 非表示 |
③ パネルの見た目を変更
次に、それぞれのパネルの背景色を変更して、分かりやすくします。
- LeftPanelを選択
- インスペクターで
ImageコンポーネントのColorを 赤 に変更 - RightPanel を青、BackPanel を黄 に変更
BackPanelは初期状態では非表示にするので、Inspector の チェックを外す ことで非表示にできます。
BackPanelを選択Inspectorのゲームオブジェクトをアクティブにする(チェックボックス)をオフ
④ ボタンの追加
次に、パネルにカメラ操作用のボタンコンポーネントを追加します。
- LeftPanel を選択
- インスペクター画面の「AddComponent」ボタンをクリックします。
- 「Button」を検索して追加します。
- 同じ手順で RightButton、BackButtonにも追加
⑤ 配置を調整
最後に、各ボタンを画面の見やすい位置に調整します。
| ボタン | 配置場所 |
|---|---|
| LeftButton | 画面左側 |
| RightButton | 画面右側 |
| BackButton | 画面中央(ズーム時のみ表示) |
Rect TransformのAnchorを 左・右に設定(各ボタンの位置を固定)WidthやHeightを適宜調整(ボタンのサイズ)


これで、カメラを操作するためのUIの基本部分が完成しました!お好みで画像やTextを設定してデザインを変更してみてください。次は 「カメラのスクリプト作成」 に進んで、ボタンを押したときにカメラが動くように設定していきます。
3. カメラのスクリプト作成
脱出ゲームでは、プレイヤーが視点を動かして部屋の隅々を調べることが重要です。そこで、ボタンをクリックするとカメラが左右に回転し、特定のオブジェクトを拡大表示できるようにします。
今回は、カメラの回転・ズーム機能を制御する CameraManager スクリプト を作成し、ボタン操作でカメラを動かせるようにしていきます。
1. CameraManager スクリプトの作成
まず、カメラの動作を管理するスクリプトを作成しましょう。
① スクリプトを作成
プロジェクトウィンドウで 右クリック → 「Create」 → 「C# Script」 を選び、新しいスクリプトを作成します。名前は CameraManager にしましょう。
② 空のオブジェクトを作成してスクリプトをアタッチ
- ヒエラルキー(Hierarchy)ウィンドウで 右クリック → 「Create Empty」 を選び、新しい空のオブジェクトを作成します。
- 名前を
CameraManagerに変更します。 CameraManagerオブジェクトに、作成したCameraManagerスクリプトをドラッグ&ドロップしてアタッチします。
2. カメラの回転・ズームを管理するスクリプトの記述
次に、CameraManager.cs を開き、以下のコードを入力してください。
カメラの回転・ズームを制御するコード
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);
}
// カメラの位置を設定
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);
}
}
3. スクリプトの詳細解説
このスクリプトでは、カメラの回転・ズーム切り替え機能 を実装しています。
① TurnRight() と TurnLeft()
cameraPositions[]に登録された カメラ位置オブジェクト を順番に参照し、カメラの位置と角度を変更します。- これにより、ボタンをクリックするとカメラが回転 します。
② OnBack()
- ズームカメラを無効化し、通常のカメラに戻す処理 です。
- Backボタンを非表示 にし、左右の移動ボタンを再表示します。
③ SetZoomCamera()
ZoomCameraSetterから呼び出される関数で、クリックしたオブジェクトのズームカメラを有効化します。- ズーム時には、移動ボタンを非表示にしてBackボタンを表示 します。
4. ボタンのOnClick設定
カメラを操作するための LeftPanel(左回転), RightPanel(右回転), BackPanel(ズーム解除) の ボタンを設定 していきます。ボタンをクリックすると、CameraManager の関数が呼び出されてカメラが動くようにしましょう。
① ボタンのOnClick設定
まず、それぞれのボタンに OnClick() イベント を追加していきます。
- Unityエディタの Hierarchy(ヒエラルキー)ウィンドウで
LeftPanel,RightPanel,BackPanelを選択 します。 - Inspector(インスペクター)ウィンドウで
Buttonコンポーネントを確認 します。 OnClick()セクションの「+」ボタンをクリック して、新しいイベントを追加します。CameraManagerをOnClick()のオブジェクトに設定LeftPanelのOnClick()にCameraManagerをドラッグ&ドロップRightPanelのOnClick()にCameraManagerをドラッグ&ドロップBackPanelのOnClick()にCameraManagerをドラッグ&ドロップ
- 関数を割り当てる
LeftPanel→CameraManager.TurnLeftRightPanel→CameraManager.TurnRightBackPanel→CameraManager.OnBack
設定が完了すると、ボタンをクリックすることでカメラが動くようになります。
5. カメラのポジション設定
カメラを回転させるには、カメラの位置と角度をあらかじめ設定しておくことが重要です。この記事では、4方向の壁を向くようにカメラの位置を決める方法を紹介します。
① CameraPositionsオブジェクトを作成
まず、カメラのポジションを管理する空のオブジェクトを作ります。
- ヒエラルキー(Hierarchy)ウィンドウで右クリック
- 「Create Empty」を選択
- 名前を 「CameraPositions」 に変更
この CameraPositions の子オブジェクトとしてカメラ位置を設定するためのオブジェクトを追加していきます。
② カメラのポジション用オブジェクトを作成
カメラの位置を決めるために、4方向の位置に空のオブジェクトを作るのも良いですが、それだとどこに配置しているかわかりにくいことがあります。
そこで、目印としてCubeを使う方法を紹介します。
CameraPositionsを選択した状態で、ヒエラルキーウィンドウで右クリック- 「3D Object」 → 「Cube」 を選択
- Cubeの名前を 「CamPos_Front」 に変更
→ 部屋の正面(ドアの方向など)を向くように配置 - 同じ手順で、4方向にCubeを作成
CamPos_Left(左を向くカメラ位置)CamPos_Right(右を向くカメラ位置)CamPos_Back(後ろを向くカメラ位置)
これで、4方向のカメラ位置が視覚的にわかるようになります。
③ Cubeの位置と回転を調整
各 CamPos_〇〇(Cube)の位置と回転を調整して、カメラが正しい向きを向くようにします。
位置の調整
CamPos_Front→ 部屋の正面に配置 例:(PosX-1,Y1,Z2)CamPos_Left→ 部屋の左側に配置 例:(PosX-2,Y1,Z1)CamPos_Right→ 部屋の右側に配置 例:(PosX1,Y1,Z1)CamPos_Back→ 部屋の後方に配置 例:(PosX-1,Y1,Z-1)
回転の調整
カメラが各Cubeの向きを向くように調整
- Cubeの青い矢印(Z軸の方向)がカメラの向く方向
CamPos_Front→ Z軸を部屋の正面へ 例:(RotationX0,Y180,Z0)CamPos_Left→ Z軸を部屋の左壁へ 例:(RotationX0,Y90,Z0)CamPos_Right→ Z軸を部屋の右壁へ 例:(RotationX0,Y-90,Z0)CamPos_Back→ Z軸を部屋の後ろの壁へ 例:(RotationX0,Y0,Z0)
④ CameraManagerにカメラ位置を設定
CameraManagerを選択- インスペクター(Inspector)ウィンドウで
cameraPositionsにCamPos_Front,CamPos_Left,CamPos_Right,CamPos_BackをセットCameraPositionsの子オブジェクトをドラッグ&ドロップでセットすればOK
- 各パネルをドラッグアンドドロップしてセット

⑤ メインカメラの初期位置をリセット
カメラを正しい位置に動かすために、メインカメラの位置をリセットします。
- ヒエラルキーから
Main Cameraを選択 - インスペクターの
Transformを以下に設定- Position →
X: 0, Y: 0, Z: 0 - Rotation →
X: 0, Y: 0, Z: 0
- Position →
- LeftPanel、RightPanelのボタンを押しながら、カメラの位置が正しく動くか確認
⑥ 見えないオブジェクトは非表示にする
CamPos_〇〇 を Cube で作った場合、そのままだとゲーム中に表示されてしまいます。
これを防ぐために MeshRendererをオフに しておきましょう。
- ヒエラルキーで
CamPos_Frontなどのオブジェクトを選択 - インスペクターで
Mesh Rendererのチェックを外す - すべての
CamPos_〇〇で同じ設定を行う
これで、ゲーム中にCubeが表示されなくなります。
⑦ 動作確認
すべての設定が完了したら、Unityを**再生ボタン(▶)**でテストしてみましょう。
- LeftPanel(左ボタン)をクリック → カメラが左に回転
- RightPanel(右ボタン)をクリック → カメラが右に回転
- カメラが4方向の位置にスムーズに移動するか確認

これで、ボタンをクリックすることでカメラが部屋の4方向に回転できるようになりました!
次のステップでは、クリックでズームする機能を実装していきます!
6. ズーム機能の実装
脱出ゲームでは、部屋のオブジェクトをクリックしたときにズームする機能がよく使われます。例えば、ドアの鍵穴を調べるためにズームしたり、パスワードのヒントを拡大表示したりするシーンを作ることができます。
今回は、ドアにズーム機能を追加してみましょう。メインカメラとは別にズーム用のカメラを用意し、クリック時に切り替えることでズーム機能を実現します。
6.1. ズーム用のカメラを作成
まず、ズームするための専用カメラを作成します。
- Hierarchyウィンドウで右クリック → 「Camera」 を選択
- 作成したカメラの名前を ZoomCamera に変更
- Inspectorウィンドウで
Transformの位置を調整し、ドアにズームするように配置 GameObjectを非表示にするため、Inspectorでチェックを外す
📌 ポイント
ズームカメラの Field of View (視野角) を調整すると、より拡大した見え方にできます。
6.2. ズーム用のクリック判定を作成
ズーム機能を作動させるため、ドアにコライダーを追加します。
- ドアの子オブジェクトを作成
- Hierarchyウィンドウで**ドアの上で右クリック → 「Create Empty」**を選択
- 名前を DoorZoom に変更
- Inspector で 「Add Component」 → 「Box Collider」 を追加
Sizeをドアより少し大きめに設定し、クリックしやすくする
📌 ポイント
Box Collider の Is Trigger をオンにすると、他の物理衝突を避けながらクリック判定ができる。
6.3. ズーム用スクリプトを作成
ズームの切り替えを行う ZoomCameraSetter.cs を作成します。
- プロジェクトウィンドウで右クリック →
Create→C# Script - スクリプト名を
ZoomCameraSetterに変更 - 以下のコードを入力
using UnityEngine;
public class ZoomCameraSetter : MonoBehaviour
{
[SerializeField] Camera zoomCamera = default;
public void OnClickObj()
{
zoomCamera.gameObject.SetActive(true);
CameraManager.instance.SetZoomCamera(zoomCamera);
}
}
このスクリプトは、クリックされたオブジェクトの zoomCamera をアクティブ化し、CameraManager にズームカメラの情報を渡します。
6.4. スクリプトを適用
作成した ZoomCameraSetter を DoorZoom に適用し、Inspector で ZoomCamera をセットします。
DoorZoomを選択InspectorでAdd Component→ZoomCameraSetterを追加ZoomCameraSetterに ZoomCamera をドラッグ&ドロップ してセット

6.5. クリックイベントを追加
次に、クリック時に OnClickObj() を呼び出すように設定します。
DoorZoomのInspectorで 「Add Component」 → 「Event Trigger」 を追加- 「Add New Event Type」 → 「Pointer Click」 を選択
+ボタンをクリックし、ZoomCameraSetterをドラッグ&ドロップ- 関数
OnClickObj()を選択
これで、ドアをクリックするとズームカメラがアクティブになり、カメラがドアにズームされます!
6.6. バックボタンの設定
ズームしたときに BackPanel を表示 し、元のカメラに戻れるように設定します。
BackPanelのButtonのOnClick()にCameraManagerをセットし、OnBack()を実行
これで、ズーム時に BackPanel が表示され、ボタンを押すとズームを解除できます!

これで、脱出ゲームにクリックでズームする機能を実装できました!🎉部屋のオブジェクトが増えても同じようなやり方でズーム機能を設定できます。
7. ズーム時のみドアを開ける設定
通常の脱出ゲームでは、ズームしないとドアを開けられないようにすることがあります。この設定を行うことで、プレイヤーが適切なヒントを確認したり、鍵を見つけたりした後にドアを開けるようにできます。
この機能を実現するために、レイヤーとPhysicsRaycasterの設定を活用します。
7.1. 新しいレイヤー「zoom」を作成
まず、ズーム時のみクリック可能にするためのレイヤーを作成します。
- Unityのメニューバーから 「Edit」 → 「Project Settings」 を開く
- 「Tags and Layers」 を選択
- 「Layers」 セクションで一番下の空きスロットをクリック
- 新しいレイヤー名を「zoom」 に設定

7.2. DoorZoom のレイヤーを変更
DoorZoomオブジェクトを選択- Inspector ウィンドウの「Layer」 をクリック
- 新しく作成した「zoom」レイヤーを選択
📌 ポイント
これで DoorZoom は「zoom」レイヤーに属するようになりました。
7.3. DoorのZoomCamera の PhysicsRaycaster 設定
次に、DoorZoomCamera の PhysicsRaycaster の設定を変更して、通常の状態では DoorZoom をクリックできないようにします。
DoorのZoomCameraを選択- Inspector ウィンドウで 「Add Component」 → 「PhysicsRaycaster」 を追加
- 「Event Mask」の設定で「zoom」のチェックを外す
📌 ポイント
これにより、ズームカメラが DoorZoom を認識しなくなります。
7.4. 動作の仕組み
この設定によって、以下のような動作になります。
✅ ズーム前:DoorZoom にクリックするとズームカメラになる
✅ ズーム後:DoorZoom をクリックするとドアが開く

ズームしないとドアを開けられない仕様になったので、プレイヤーが適切なタイミングで操作するように誘導できます。
8. 表示の調整
UnityでUIを作成すると、Canvasの Sort Order(表示順序)によってボタンやUIが意図しない位置に表示されることがあります。特に、移動ボタンがアイテムボックスより前面に表示されると、ゲームのUIが崩れてしまいます。
ここでは、ボタンの表示順を適切に調整する方法を説明します。
1. 問題の確認
LeftPanel,RightPanel,BackPanelのボタンが、アイテムボックス(ItemBoxCanvas)より前に表示されることがある- これでは、ボタンがアイテムに被ってしまい、視認性や操作性が悪くなる
- Canvasの
Sort Orderを調整して、適切な順番で表示するようにする
2. CanvasのSort Orderとは?
Sort Order は、Canvasの描画優先順位を決める設定です。
数値が大きいCanvasが前面に表示され、小さいCanvasは背面に隠れるようになります。
たとえば:
Sort Order: 0→ 一番奥に表示されるSort Order: 1→Sort Order: 0のCanvasより前面に表示Sort Order: 10→ さらに前面に表示
この仕組みを利用して、移動ボタン(CameraMoveCanvas)とアイテムボックス(ItemBoxCanvas)の表示順を適切に設定します。
3. Sort Order の設定方法
CameraMoveCanvasのSort Orderを確認CameraMoveCanvasを選択- Inspectorウィンドウで
Canvasコンポーネントをチェック Sort Orderの値を現在のItemBoxCanvasより小さくする
ItemBoxCanvasのSort Orderを調整ItemBoxCanvasのSort OrderをCameraMoveCanvasより大きい値 に設定- 例:
CameraMoveCanvasがSort Order: 1の場合、ItemBoxCanvasをSort Order: 2にする
- 動作確認
- ゲームを実行し、アイテムボックスがボタンより手前に表示されているか確認
4. 表示順を調整する際のポイント
- 数値を変えすぎると他のUIに影響が出るため、少しずつ調整する
- 複数のCanvasがある場合は、整理して優先度を決める
Sort Orderを変更した後は必ず動作確認をする
5. まとめ
- ボタンがアイテムボックスより手前に表示される場合
ItemBoxCanvasのSort OrderをCameraMoveCanvasより大きい値 に設定する
Sort Orderを活用してUIの重なりを調整- 変更後はゲームを実行して確認

これで、UIの表示が正しく調整でき、快適なゲーム画面が作れます!
あわせて読みたい
脱出ゲームやカメラ操作に関する知識をさらに深めたい方はこちらの記事もおすすめです!
- Unity3D脱出ゲームの作り方⑦:アイテムズーム機能を実装しよう!
カメラズームと相性抜群!アイテムの拡大表示機能の実装方法を解説。 - Unity3D脱出ゲームの作り方⑤|ドアをクリックで開く&アイテム選択機能
アイテム選択とドア開閉の連動を学ぶならこちら! - Unity3D脱出ゲームの作り方⑨ |アイテムを設置するギミック
アイテム設置時の演出にカメラ操作を組み合わせるテクニックも参考になります。 - Unityでカメラを操作!外部スクリプトからMainCameraを回転させる方法
外部スクリプトでカメラを動かす基本を習得! - Unityで簡単!キー入力でカメラのアングルを切り替える方法
視点切り替えを実装したいときに役立ちます。
よくある質問(FAQ)
- Qカメラが回転しない!
- A
CameraManagerのcameraPositionsに正しくオブジェクトが登録されているか確認してください。
- Qズーム機能が動作しない!
- A
ZoomCameraSetterのzoomCameraにズーム用のカメラが正しく設定されているか確認してください。
- Qバックボタンを押してもカメラが戻らない!
- A
OnBack()内でmainCamera.SetActive(true);を忘れていないかチェックしましょう。









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