FPSゲームを作ろうとすると、マウスの動きに合わせてカメラが滑らかに回転する仕組みが必要になります。
「マウス入力をどうやってカメラ回転に変換するの?」
「オイラー角とクォータニオン、どっちを使えばいい?」
「カメラが反転してしまう問題を解決したい」
そんな疑問を抱えている方に向けて、FPSゲームで必須のカメラ回転制御について、数学的な仕組みと実装方法を詳しく解説します。
\読むだけで終わらせない!実際にゲームを作って実力をつけよう/
トレンド×入門に最適
Unity ノンフィールドRPG
+スレスパ風JRPG講座
Unity6対応・スマホ化対応の最新カリキュラム。今もっとも人気のデッキ構築型ゲームをJRPGと組み合わせて実装。初心者が最初に選ぶ一本として最適です。
王道アクションに挑戦
Unity 2Dアクションゲーム
の作り方講座(ロックマン風)
ロックマン風の本格横スクロールACTをスマホ化・広告実装まで対応。7ステージ+ラスボスという市販ゲームに近い本格構成で、リリースまで見据えて作れます。
3D入門に最適
ゼルダ風3Dアクションゲーム
の作り方講座
ゼルダの伝説・モンハン・原神のような3Dアクションをスマホ対応で作れる入門講座。初心者でも全16回でしっかり3D開発の基礎を習得できます。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
FPSカメラ回転制御の基本

FPSゲームのカメラ回転制御は、マウスの移動量をカメラの回転角度に変換する仕組みです。
プレイヤーがマウスを横に動かすとカメラが左右に回転し、上下に動かすとカメラが上下に回転する。
これにより、3D空間内を自由に見回せるようになるんです。
マウス入力の取得
Unityでは、Input.GetAxisを使ってマウスの移動量を取得できます。
|
1 2 3 |
float mouseX = Input.GetAxis("Mouse X"); float mouseY = Input.GetAxis("Mouse Y"); |
Mouse Xはマウスの横方向の移動量、Mouse Yは縦方向の移動量を表します。
これらの値は、マウスの移動速度に応じて変化するため、感度設定と組み合わせて使用するのが一般的。
感度の調整
マウスの感度を調整するには、移動量に感度係数を掛けます。
|
1 2 3 4 5 |
public float mouseSensitivity = 2.0f; float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity; float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity; |
感度を高くするとカメラの回転が速くなり、低くすると遅くなります。
一般的には1.5〜3.0の範囲が使いやすいです。
- マウスの移動量を回転角度に変換する
- 左右の回転(Yaw)と上下の回転(Pitch)を独立に制御する
- 感度設定で回転速度を調整できる
- 上下の視点に制限を設けることが多い
マウス入力からカメラ回転への変換方法

マウスの移動量をカメラの回転角度に変換する方法を見ていきましょう。
基本的な変換式
マウスの移動量を回転角度に変換するには、以下のような計算を行います。
|
1 2 3 |
float rotationY = mouseX; // Y軸周りの回転(左右) float rotationX = -mouseY; // X軸周りの回転(上下) |
注意点として、上下方向(Pitch)はマイナスを掛ける必要があります。
これは、Unityの座標系でマウスのY軸が上方向が正、カメラのPitchが下方向が正だからです。
累積的な回転
カメラの回転は、マウスの移動量を累積していく必要があります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
float rotationY = 0f; float rotationX = 0f; void Update() { float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity; float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity; rotationY += mouseX; // 左右の回転を累積 rotationX -= mouseY; // 上下の回転を累積 rotationX = Mathf.Clamp(rotationX, -90f, 90f); // 上下の視点制限 } |
Mathf.Clampを使って、上下の視点を制限するのが一般的。
これにより、カメラが真上や真下を向いてしまうことを防げます。
オイラー角とクォータニオンの使い分け

Unityで回転を表現する方法には、オイラー角とクォータニオンがあります。
それぞれの特徴と使い分けを理解しておくことが大切です。
オイラー角とは
オイラー角は、X、Y、Z軸周りの3つの回転角度で回転を表現する方法です。
直感的で分かりやすいのが特徴。
UnityのTransform.eulerAnglesが、まさにオイラー角を扱うプロパティです。
クォータニオンとは
クォータニオンは、4つの数値で回転を表現する方法です。
オイラー角では発生するジンバルロックの問題を回避できるのが特徴。
Unityの内部では、回転は全てクォータニオンで管理されています。
FPSカメラでの使い分け
FPSカメラでは、オイラー角で角度を管理し、クォータニオンに変換して適用する方法が一般的です。
|
1 2 3 4 5 6 7 8 |
// オイラー角で角度を管理 rotationY += mouseX; rotationX -= mouseY; rotationX = Mathf.Clamp(rotationX, -90f, 90f); // クォータニオンに変換して適用 transform.rotation = Quaternion.Euler(rotationX, rotationY, 0f); |
この方法なら、直感的に角度を管理できつつ、ジンバルロックの問題も回避できます。
- オイラー角は直感的だが、ジンバルロックの問題がある
- クォータニオンはジンバルロックを回避できるが、直接編集は難しい
- FPSカメラでは、オイラー角で管理→クォータニオンに変換する方法がおすすめ
Unityでの実装例

UnityでFPSカメラを実装する具体的な例を見ていきましょう。
基本的なFPSカメラスクリプト
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
using UnityEngine; public class FPSCameraController : MonoBehaviour { [Header("カメラ設定")] public float mouseSensitivity = 2.0f; public float maxLookUp = 90f; public float maxLookDown = -90f; private float rotationX = 0f; private float rotationY = 0f; void Start() { // マウスカーソルをロック Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; } void Update() { // マウス入力を取得 float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity; float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity; // 回転角度を更新 rotationY += mouseX; rotationX -= mouseY; // 上下の視点を制限 rotationX = Mathf.Clamp(rotationX, maxLookDown, maxLookUp); // カメラを回転 transform.rotation = Quaternion.Euler(rotationX, rotationY, 0f); } } |
このスクリプトをカメラオブジェクトにアタッチすれば、基本的なFPSカメラ制御が実現できます。
上下視点制限の実装
上下の視点を制限するには、Mathf.Clampを使用します。
|
1 2 |
rotationX = Mathf.Clamp(rotationX, -90f, 90f); |
これにより、カメラが真上や真下を向くことを防げます。
一般的には-90度から90度の範囲が使いやすいです。
ジンバルロック対策
ジンバルロックを避けるため、Z軸の回転を0に固定します。
|
1 2 |
transform.rotation = Quaternion.Euler(rotationX, rotationY, 0f); |
Z軸を0に固定することで、カメラが予期せず傾いてしまう問題を防げます。

まずはシンプルな実装から始めて、徐々に機能を追加していきましょう。
FPSカメラの実装手順

※この順番を守らずに作り始めると、だいたい後で全部作り直すことになります。
- STEP1マウス入力の取得
Input.GetAxisを使って、マウスの移動量を取得します。Mouse XとMouse Yを感度と組み合わせて使用しましょう。
- STEP2回転角度の計算
マウスの移動量を回転角度に変換します。左右の回転(Yaw)と上下の回転(Pitch)を独立に管理します。
- STEP3視点制限の実装
Mathf.Clampを使って、上下の視点を制限します。一般的には-90度から90度の範囲が使いやすいです。
- STEP4クォータニオンへの変換
オイラー角からクォータニオンに変換して、カメラに適用します。Z軸の回転は0に固定して、ジンバルロックを防ぎましょう。
- STEP5マウスカーソルのロック
Cursor.lockStateを使って、マウスカーソルをロックします。これにより、FPSゲームらしい操作感になります。
よくある問題と解決方法

FPSカメラを実装する際によくある問題と、その解決方法を紹介します。
カメラが反転してしまう
カメラが上下に反転してしまう問題は、Y軸の符号を間違えている場合に発生します。
解決方法は、マウスのY軸にマイナスを掛けること。
|
1 2 3 4 5 6 |
// ✅ 正しい実装 rotationX -= mouseY; // ❌ 間違った実装 rotationX += mouseY; |
Unityの座標系では、マウスのY軸が上方向が正、カメラのPitchが下方向が正なため、符号を反転する必要があります。
感度が高すぎる・低すぎる
感度の調整は、mouseSensitivityの値を変更することで可能。
|
1 2 |
public float mouseSensitivity = 2.0f; // デフォルト値 |
一般的には1.5〜3.0の範囲が使いやすいですが、プレイヤーの好みに応じて調整しましょう。
カメラが滑らかに動かない
カメラがカクカク動く場合は、Time.deltaTimeを使ってフレームレートに依存しない処理にする必要があります。
|
1 2 3 |
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime; float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime; |
ただし、マウス入力の場合は、通常はTime.deltaTimeを使わない方が自然な動きになります。
マウスカーソルが表示されてしまう
マウスカーソルを非表示にするには、Cursor.visibleをfalseに設定します。
|
1 2 3 |
Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; |
また、Cursor.lockStateをLockedに設定することで、マウスカーソルを画面中央に固定できます。
- カメラが反転する → Y軸の符号を確認する
- 感度が合わない → mouseSensitivityの値を調整する
- カメラがカクつく → フレームレートの影響を確認する
- カーソルが表示される → Cursor.visibleをfalseに設定する
応用的な実装テクニック

基本的なFPSカメラを実装した後は、さらに便利な機能を追加していきましょう。
感度の動的調整
実行中に感度を変更できるようにするには、設定UIと連携します。
|
1 2 3 4 5 6 |
public void SetSensitivity(float value) { mouseSensitivity = value; PlayerPrefs.SetFloat("MouseSensitivity", value); } |
PlayerPrefsを使って、感度設定を保存しておくと便利です。
スムーズな補間
カメラの回転を滑らかにするには、補間を使います。
|
1 2 3 4 5 6 |
float targetRotationX = rotationX; float targetRotationY = rotationY; rotationX = Mathf.Lerp(rotationX, targetRotationX, Time.deltaTime * smoothSpeed); rotationY = Mathf.Lerp(rotationY, targetRotationY, Time.deltaTime * smoothSpeed); |
ただし、FPSカメラでは即座に反応することが重要なので、補間を使わない方が一般的です。
マウスカーソルの表示切り替え
ESCキーでマウスカーソルを表示・非表示を切り替える機能を追加できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
if (Input.GetKeyDown(KeyCode.Escape)) { if (Cursor.lockState == CursorLockMode.Locked) { Cursor.lockState = CursorLockMode.None; Cursor.visible = true; } else { Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; } } |
これにより、プレイヤーが設定メニューを開けるようになります。
FPSカメラの学習を深めるには

FPSカメラの基礎を理解した後は、さらに深く学んでいくことが大切です。
Unity入門の森では、FPSゲーム制作に関する知識を体系的に学べる環境が整っています。
特に、FPSゲーム講座(弓矢3D)では、FPSカメラだけでなく、武器システム、敵AIなど、FPSゲームに必要な要素を一通り学べます。
また、永久会員チケットでは、ゲーム開発全般に関する知識を幅広くカバーしているため、FPSゲーム以外にも応用できる知識が身につきます。
カメラ制御の基礎から応用まで、実際のコードと紐付けて学べるので、理解が深まりやすいはずです。
- マウス入力からカメラ回転への変換方法
- オイラー角とクォータニオンの使い分け
- Unityでの実装例(上下視点制限・ジンバルロック対策含む)
- よくある問題(カメラが反転する等)の解決方法
- 応用的な実装テクニック
記事を読んで「作ってみたい!」と思ったら!人気ゲームを題材にした講座で実力をつけよう
知識を読むだけで終わらせるのはもったいない。実際に手を動かしてゲームを1本完成させることで、理解が一気に深まります。人気タイトルをモデルにした講座で、ゲーム開発の第一歩を踏み出しましょう。
Unity ノンフィールドRPG+スレスパ風JRPG講座【Unity6対応!トレンドのデッキ構築×JRPGをスマホ向けに作れる!】

- Unity6対応・スマホ化対応で最新環境のゲーム開発が学べる
- Slay the Spire風のデッキ構築システム×JRPGの組み合わせを実装
- 初心者でも取り組みやすい丁寧な解説構成
- ノンフィールドRPGとデッキ構築JRPGの2つを合わせて学ぶのがおすすめ
Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座は、今もっともトレンドのデッキ構築型ゲームシステムをJRPGと組み合わせて実装する方法を学べる講座です。
Unity6対応・スマホ化対応の最新カリキュラムで、コラムやTIPSで読んで「なるほど」と思った知識を、実際に動くゲームとして形にする体験ができます。
「Slay the Spireみたいなゲームを自分でも作ってみたい!」という人の最初の一歩として最適な講座です。
Unity6対応・スマホ化対応の最新カリキュラム
トレンドのデッキ構築×JRPGを最速で実装しよう
→ スレスパ風デッキ構築JRPG講座を見てみる
スマホ対応の最新環境で、ゲーム開発の第一歩を踏み出そう!
Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!スマホ化・広告実装まで対応した本格横スクロールACTを作れる!】

- ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
- 7ステージ+ラスボスステージの市販ゲームに近い本格的なゲーム設計
- スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
- 敵AI15体・多彩なマップギミック・武器システムを完全実装
- 完全オリジナルゲームをアセット不使用で素材提供付きで制作
Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを開発できるようになる本格的な講座です。
TIPSやコラムで学んだ当たり判定・物理挙動・敵AIの知識を、実際のゲームコードとして実装する体験が全16回に凝縮されています。スマホ化・広告実装まで対応しているため、作って終わりではなくリリースまで見据えた実践スキルが身につきます。
「読んで理解した知識を、動くゲームとして形にしたい」という人に強くおすすめの一本です。
スマホ化・広告実装まで対応した本格横スクロールACT
ロックマン風の2Dアクションゲームをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
広告収益まで視野に入れた実践スキルを今すぐ手に入れよう!
ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも3Dアクションがスマホ対応で作れる!】

- ゼルダの伝説・モンハン・原神のような3Dアクションをゼロから開発
- 初心者でも取り組みやすい丁寧な解説構成
- スマホ化対応で実機で動かせるゲームが完成
- アセットを使った実践的なゲーム開発手法が身につく
- 画像・動画・全ソースコード公開の充実したサポート
ゼルダ風3Dアクションゲームの作り方講座は、ゼルダの伝説・モンハン・原神のような本格的な3Dアクションゲームを作りたい人におすすめの入門講座です。
コラム・TIPSで「3Dゲームはなんとなく難しそう」と感じていた人でも、全16回の丁寧な解説で確実に完成まで到達できます。スマホ化対応で実機で動かせるため、作った達成感がひときわ大きい講座です。
「3Dゲームの仕組みを理解した次は、実際に自分で作ってみたい」という人の最初の一歩として最適です。
初心者でも3Dアクションがスマホ対応で完成する
ゼルダ風3Dアクションゲームで3D開発の第一歩を踏み出そう
→ ゼルダ風3Dアクションゲームの作り方講座を見てみる
3D開発の壁を一気に突破!スマホで動くオリジナルゲームを完成させよう!
まとめ

この記事では、FPSゲームで必須のカメラ回転制御について解説しました。
FPSカメラは、マウスの移動量を回転角度に変換することで実現できます。
オイラー角で角度を管理し、クォータニオンに変換して適用する方法が一般的。
「FPSカメラって難しそう💧」と感じる方もいるかもしれませんが、基本的な仕組みを理解すれば実装できます。
まずはシンプルな実装から始めて、徐々に機能を追加していきましょう。
- マウスの移動量を回転角度に変換する仕組みが基本
- オイラー角で管理し、クォータニオンに変換して適用する方法がおすすめ
- 上下の視点はMathf.Clampで制限する
- Y軸の符号を間違えるとカメラが反転するので注意
- Cursor.lockStateでマウスカーソルをロックすると、FPSらしい操作感になる
まずは基本的な実装から始めて、徐々に応用的な機能に挑戦していきましょう。
Unity入門の森では、FPSゲーム制作に関する知識を体系的に学べる環境が整っています。
疑問があれば、ぜひ活用してみてください。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。





コメント