FPSの視点操作を作りたい。
でも、「マウスでカメラを動かす処理が難しい」そんな風に感じていませんか。
実は、FPSの視点操作は、マウスの入力をカメラの回転に変換する処理で実現できます。
Unityを使えば、初心者でもカメラ制御システムを作ることができるでしょう。
この記事では、FPSの視点操作を実装する方法を、コピペで動くサンプルコードとともに詳しく解説します。
✨ この記事でわかること
- FPSカメラ制御の基本的な実装方法(所要1時間)
- マウス入力とカメラ回転の連動処理(所要1時間)
- 上下左右の視点移動と回転制限の実装(所要1時間)
- FPSカメラ制御でよくあるエラー5選と解決方法
- 実用的なカメラシステム完成までの4ステップ(合計5時間)

最初は左右の回転だけから始めて、徐々に上下の回転を追加するのがコツです。段階的に進めましょう。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
FPSカメラ制御とは?基礎知識から理解する

FPSカメラ制御とは、プレイヤーがマウスを動かすことで、視点(カメラ)が回転するシステムのことです。
FPSゲームでは必須の機能です。
FPSカメラ制御を実装するには、マウス入力の取得とカメラの回転処理が重要になります。
マウスの移動量を取得し、それをカメラの回転角に変換します。
上下の回転には制限を設けることで、自然な視点操作を実現できるでしょう。
FPSゲームでは、プレイヤーがマウスを動かすと、視点がそれに応じて動く必要があります。
この処理を実装することで、直感的な操作が可能になります。
カメラ制御は、FPSゲームの操作性に大きく影響する重要な要素です。
FPSカメラ制御に必要な要素
✅ FPSカメラ制御に必要な要素
- マウス入力の取得:マウスの移動量を取得する処理(所要時間:30分)
- カメラの回転処理:マウス入力に応じてカメラを回転させる処理(所要時間:1時間)
- 回転制限:上下の回転角に制限を設ける処理(所要時間:30分)
- 感度調整:マウスの感度を調整する処理(所要時間:30分)
マウス入力の取得は、Input.GetAxis(“Mouse X”)とInput.GetAxis(“Mouse Y”)を使って行います。
カメラの回転処理は、取得したマウス入力に応じてカメラを回転させる処理。
回転制限は、上下の回転角に制限を設けることで、自然な視点操作を実現します。
感度調整は、プレイヤーの好みに応じて調整できるようにする処理です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
Unityを使ったFPSカメラ制御の実装方法

Unityを使ったFPSカメラ制御を実装する方法を解説します。
ここでは、コピペで動くサンプルコードを紹介します。
実装手順:基本的なカメラ制御システムを作る
ステップ1:カメラの配置(所要10分)
- Main CameraをPlayerオブジェクトの子オブジェクトにする
- Main CameraのPositionを(0, 1.6, 0)に設定(目の高さ)
- Main CameraのRotationを(0, 0, 0)に設定
カメラをPlayerの子オブジェクトにすることで、プレイヤーと一緒に移動するようになります。
Positionを(0, 1.6, 0)に設定することで、プレイヤーの目の高さにカメラが配置されます。
Rotationを(0, 0, 0)に設定することで、初期状態でのカメラの向きを設定します。
ステップ2:カメラ制御スクリプトの作成(所要30分)
以下のコードで、マウスで視点を動かすことができます。
|
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 |
using UnityEngine; public class FPSCamera : MonoBehaviour { [SerializeField] private float mouseSensitivity = 2.0f; [SerializeField] private float upDownRange = 60.0f; private float verticalRotation = 0; private Camera playerCamera; void Start() { playerCamera = GetComponent(); Cursor.lockState = CursorLockMode.Locked; } void Update() { // マウスの移動量を取得 float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity; float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity; // 上下の回転(カメラの上下) verticalRotation -= mouseY; verticalRotation = Mathf.Clamp(verticalRotation, -upDownRange, upDownRange); playerCamera.transform.localRotation = Quaternion.Euler(verticalRotation, 0, 0); // 左右の回転(プレイヤーの左右) transform.parent.Rotate(0, mouseX, 0); } } |
配置場所:Main Cameraオブジェクトにアタッチ
確認方法:再生ボタンを押して、マウスを動かして視点が回転すればOK
mouseSensitivityは、マウスの感度を調整するパラメータ。
upDownRangeは、上下の回転角の制限値。
verticalRotationは、上下の回転角を保持する変数です。
Cursor.lockStateをCursorLockMode.Lockedに設定することで、マウスカーソルを画面中央に固定します。
Input.GetAxis(“Mouse X”)とInput.GetAxis(“Mouse Y”)で、マウスの移動量を取得します。
⚠️ よくあるエラー
- マウスが動かない → Cursor.lockStateがCursorLockMode.Lockedになっているか確認(Start関数で設定する)
- 上下の回転が逆 → mouseYの符号を反転(
verticalRotation += mouseY;に変更) - 回転速度が速すぎる/遅すぎる → mouseSensitivityの値を調整(通常は1.0f〜3.0fが適切)
- カメラが回転しない → Main Cameraにスクリプトがアタッチされているか確認
より高度なカメラ制御の実装
基本的なカメラ制御に加えて、より高度な機能を追加できます。
例えば、マウス感度を設定から変更できるようにしたり、カメラの揺れを追加したりできます。
|
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 38 39 40 |
public class FPSCameraAdvanced : MonoBehaviour { [SerializeField] private float mouseSensitivity = 2.0f; [SerializeField] private float upDownRange = 60.0f; [SerializeField] private bool invertY = false; // Y軸の反転オプション private float verticalRotation = 0; private Camera playerCamera; void Start() { playerCamera = GetComponent(); Cursor.lockState = CursorLockMode.Locked; } void Update() { float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity; float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity; // Y軸の反転オプション if (invertY) { mouseY = -mouseY; } verticalRotation -= mouseY; verticalRotation = Mathf.Clamp(verticalRotation, -upDownRange, upDownRange); playerCamera.transform.localRotation = Quaternion.Euler(verticalRotation, 0, 0); transform.parent.Rotate(0, mouseX, 0); } // マウス感度を設定から変更 public void SetMouseSensitivity(float sensitivity) { mouseSensitivity = sensitivity; } } |
この実装では、Y軸の反転オプションと、マウス感度を動的に変更する機能を追加しています。
これにより、プレイヤーが好みに応じて設定を変更できるようになります。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
カメラ制御の設計ポイント

FPSカメラ制御を実装する際の設計ポイントを解説します。
自然な視点操作を実現するための重要なポイントです。
回転制限の重要性
上下の回転には制限を設けましょう。
制限がないと、カメラが上下に360度回転してしまい、操作が混乱します。
upDownRangeを60度程度に設定することで、自然な視点操作が可能になります。
Mathf.Clamp関数を使って、verticalRotationを-upDownRangeからupDownRangeの範囲に制限します。
これにより、カメラが上下に360度回転することを防げます。
一般的には、upDownRangeを60〜90度程度に設定することが多いです。
感度調整の実装
マウスの感度は、プレイヤーの好みに応じて調整できるようにします。
mouseSensitivityの値を変更することで、感度を調整できます。
一般的には、1.0f〜3.0fの範囲が適切でしょう。
感度が高すぎると、微細な調整が難しくなり、感度が低すぎると、素早いターンができなくなります。
プレイヤーの好みに応じて、設定から変更できるようにすることが重要です。
左右と上下の回転の分離
FPSカメラ制御では、左右の回転と上下の回転を分離することが重要です。
左右の回転は、プレイヤーオブジェクト(親オブジェクト)を回転させます。
上下の回転は、カメラオブジェクト(子オブジェクト)を回転させます。
これにより、プレイヤーの向きとカメラの向きを独立して制御できます。
transform.parent.Rotate(0, mouseX, 0)で、プレイヤーを左右に回転させます。
playerCamera.transform.localRotationで、カメラを上下に回転させます。
マウスカーソルのロック
FPSゲームでは、マウスカーソルを画面中央にロックすることが重要です。
Cursor.lockState = CursorLockMode.Lockedを設定することで、カーソルをロックできます。
これにより、マウスを動かしてもカーソルが画面から外れなくなります。
また、ESCキーなどを押した時に、Cursor.lockState = CursorLockMode.Noneに設定することで、カーソルのロックを解除できます。
マウスカーソルがロックされていないと、カメラ制御が正しく動作しない場合があります。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
カメラ制御の最適化と応用

カメラ制御の最適化と応用について解説します。
より高度な機能を追加することで、本格的なカメラシステムを実装できます。
フレームレートに依存しない回転
現在の実装では、フレームレートに依存して回転速度が変わってしまいます。
Time.deltaTimeを使うことで、フレームレートに依存しない回転を実装できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
void Update() { float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime * 60f; float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime * 60f; verticalRotation -= mouseY; verticalRotation = Mathf.Clamp(verticalRotation, -upDownRange, upDownRange); playerCamera.transform.localRotation = Quaternion.Euler(verticalRotation, 0, 0); transform.parent.Rotate(0, mouseX, 0); } |
Time.deltaTimeを使うことで、フレームレートに関係なく一定の回転速度になります。
ただし、多くのFPSゲームでは、Time.deltaTimeを使わない実装が一般的。
プレイヤーが慣れ親しんだ感覚を提供できるため、Time.deltaTimeを使わない実装も有効です。
カメラの揺れ(カメラシェイク)の実装
カメラの揺れを追加することで、よりリアルな体験を提供できます。
例えば、足音や被弾時の揺れを追加できます。
|
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 |
public class FPSCameraWithShake : MonoBehaviour { [SerializeField] private float shakeAmount = 0.1f; [SerializeField] private float shakeDuration = 0.3f; private float shakeTimer = 0f; private Vector3 originalPosition; void Start() { originalPosition = transform.localPosition; } void Update() { if (shakeTimer > 0) { transform.localPosition = originalPosition + Random.insideUnitSphere * shakeAmount; shakeTimer -= Time.deltaTime; } else { transform.localPosition = originalPosition; } } public void Shake() { shakeTimer = shakeDuration; } } |
この実装では、Shake関数を呼び出すことで、カメラを揺らせます。
足音や被弾時に呼び出すことで、よりリアルな体験を提供できます。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
FPSカメラ制御でよくある失敗5選と解決方法

FPSカメラ制御を実装する際、初心者が陥りやすい失敗があります。
ここでは、5つのよくある失敗と解決方法を紹介します。
失敗1:マウスが動かない
❌ よくある失敗
- Cursor.lockStateが設定されていない
- Input.GetAxisが正しく動作していない
- スクリプトがアタッチされていない
- Update関数が呼ばれていない
マウスが動かない場合、Cursor.lockStateの設定やスクリプトのアタッチを確認しましょう。
Start関数でCursor.lockStateを設定し、Update関数でInput.GetAxisを呼び出すことが重要です。
✅ 正しいアプローチ
- Start関数でCursor.lockStateを設定(Cursor.lockState = CursorLockMode.Locked)
- Update関数でInput.GetAxisを呼び出す(Input.GetAxis(“Mouse X”)、Input.GetAxis(“Mouse Y”))
- Main Cameraにスクリプトをアタッチ
- スクリプトが有効になっているか確認(Inspectorでチェック)
失敗2:上下の回転が逆になる
上下の回転が逆になる場合、mouseYの符号を反転することで解決できます。
プレイヤーの好みに応じて調整してみましょう。
解決方法:
- mouseYの符号を反転する(
verticalRotation += mouseY;に変更) - プレイヤーの好みに応じて調整する(invertYオプションを追加)
- 一般的には負の値を使うことが多い(
verticalRotation -= mouseY;) - 設定から変更できるようにする
失敗3:カメラが360度回転してしまう
カメラが360度回転してしまう場合、回転制限が正しく実装されていない可能性があります。
Mathf.Clamp関数を使って、回転角を制限することが重要です。
⚠️ 解決方法
- Mathf.Clamp関数を使って回転角を制限する(verticalRotation = Mathf.Clamp(verticalRotation, -upDownRange, upDownRange))
- upDownRangeの値を適切に設定する(通常は60〜90度)
- verticalRotationが正しく更新されているか確認する
- 回転制限が適用されているか確認する(デバッグログで確認)
失敗4:回転速度が速すぎる/遅すぎる
回転速度が適切でない場合、mouseSensitivityの値を調整することで解決できます。
一般的には、1.0f〜3.0fの範囲が適切です。
解決方法:
- mouseSensitivityの値を調整する(通常は1.0f〜3.0f)
- プレイヤーの好みに応じて設定から変更できるようにする
- Time.deltaTimeを使わない実装が一般的(FPSゲームでは慣れ親しんだ感覚を提供)
- テストプレイで最適な値を探す
失敗5:カメラがプレイヤーと一緒に回転しない
カメラがプレイヤーと一緒に回転しない場合、親子関係や回転処理を確認することが重要です。
⚠️ 解決方法
- Main CameraがPlayerの子オブジェクトになっているか確認する
- 左右の回転でtransform.parent.Rotateを使っているか確認する
- 上下の回転でtransform.localRotationを使っているか確認する
- 親子関係が正しく設定されているか確認する
初心者がよくやる勘違い
初心者がよくやる勘違いとして、左右と上下の回転を同じオブジェクトで処理しようとすることがあります。
左右の回転は親オブジェクト(プレイヤー)、上下の回転は子オブジェクト(カメラ)で処理することが重要です。
また、回転制限を設定し忘れる場合もあります。
回転制限を設定しないと、カメラが360度回転してしまい、操作が混乱します。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
実用的なカメラシステム完成までの4ステップ

- STEP1カメラの配置(所要30分)
Main CameraをPlayerの子オブジェクトにして、目の高さに配置する。
Positionを(0, 1.6, 0)に設定し、Rotationを(0, 0, 0)に設定する。
学べること:カメラの配置、親子関係、Transformの設定
成果物:プレイヤーの視点にカメラが配置された環境
- STEP2左右の回転処理(所要1時間)
マウスの横移動に応じてプレイヤーを左右に回転させる。
Input.GetAxis(“Mouse X”)でマウスの横移動を取得し、transform.parent.Rotateで回転させる。
学べること:マウス入力、回転処理、Input.GetAxisの使い方
成果物:左右の視点移動ができるシステム
- STEP3上下の回転処理(所要1時間)
マウスの縦移動に応じてカメラを上下に回転させる。
Input.GetAxis(“Mouse Y”)でマウスの縦移動を取得し、Mathf.Clampで回転角を制限する。
学べること:カメラの回転、回転制限、Mathf.Clampの使い方
成果物:上下左右の視点移動ができるシステム
- STEP4感度調整と最適化(所要1時間)
マウスの感度を調整し、操作感を最適化する。
mouseSensitivityの値を調整し、プレイヤーの好みに応じて設定から変更できるようにする。
学べること:パラメータ調整、UI連携、設定の保存
成果物:実用的なカメラシステム
合計5時間で、実用的なカメラシステムが完成します。
実装時のチェックリスト
✅ 実装時のチェックリスト
- Main CameraがPlayerの子オブジェクトになっているか
- Cursor.lockStateがCursorLockMode.Lockedに設定されているか
- Input.GetAxis(“Mouse X”)とInput.GetAxis(“Mouse Y”)が正しく動作しているか
- 回転制限が正しく実装されているか(Mathf.Clampを使用)
- 左右の回転でtransform.parent.Rotateを使っているか
- 上下の回転でtransform.localRotationを使っているか
- mouseSensitivityの値が適切か(1.0f〜3.0f)
- テストプレイで操作感が自然か
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
まとめ

FPSの視点操作は、マウス入力とカメラ回転を組み合わせることで実現できます。
Unityを使えば、初心者でもカメラ制御システムを作ることができるでしょう。
✅ 記事の要点まとめ
-
- カメラ制御の基本:マウス入力とカメラ回転の連動、Input.GetAxisを使った回転処理
- Unity実装:カメラの配置、カメラ制御スクリプトの作成、左右と上下の回転の分離
設計ポイント:回転制限(upDownRangeを60度程度に設定)、感度調整(mouseSensitivityを1.0f〜3.0fに設定)、マウスカーソルのロック
- 最適化と応用:フレームレートに依存しない回転、カメラの揺れ(カメラシェイク)の実装
- よくある失敗5選:マウスが動かない、上下の回転が逆、カメラが360度回転、回転速度が速すぎる/遅すぎる、カメラがプレイヤーと一緒に回転しない
- 実用的なシステム:4ステップで完成(合計5時間)
今日から始める3ステップ:
- STEP1:Main CameraをPlayerの子オブジェクトにする(所要10分)
- STEP2:カメラ制御スクリプトを作成する(所要30分)
- STEP3:マウス入力でカメラを回転させる(所要1時間)
あなたのペースで、少しずつ進めていけば大丈夫です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる



コメント