Unityでゲームを作るとき、カメラの進行不自然だったり、プレイヤーを上手く追従しなかったりしていませんか?
- キャラクターを進化させるカメラを作りたい(3D / 2D)
- スムーズに移動・回転するカメラを作りたい
- FPS / TPS / シネマティックカメラを訪れたい
Unityには標準のCamera機能に加えて、「Cinemachine」という強力なカメラシステムも用意されています。
この記事では、カメラの基本から、スクリプトによる制御、プレイヤー追従、FPS / TPSカメラ、Cinemachineを活用した高度なカメラ演出まで詳しく解説します!
※ Transformに関しては以下のサイトを参考にしてください。
この記事でわかること
- Unityのカメラの基本設定
- スクリプトでカメラを移動・回転させる方法
- プレイヤーを追従するカメラの作り方(3D / 2D)
- FPS / TPSカメラの実装方法
- Cinemachineを使ったカメラ制御の最適化
Unityのカメラの使い方
カメラの基本設定
カメラの基本設定は、Cameraコンポーネントから調整できます。
- Projection(投影方法): Perspective(透視投影) / Orthographic(平行投)
- Field of View(FOV): 大きくすると遠近感が強くなる(Perspectiveのみ)
- Near(ニアクリップ): これより手前のオブジェクトは描画されない
- Far(ファークリップ): これより奥のオブジェクトは描画されない
➡ 3Dでは「Perspective」、2Dでは「Orthographic」が一般的です!
➡ FOVを大きくすると広角になり、逆に小さくすると望遠レンズのような効果を得られます!

カメラの移動・回転をスクリプトで制御
カメラをスクリプトで動かす場合、transform.positionやtransform.rotationを使用します。
※ このスクリプトは「Main Camera」にアタッチしてください!
・ カメラを前方に移動
キーボード(W
/ S
)またはゲームパッドのスティックで前後移動できるようにします。
void Update()
{
float moveSpeed = 5f;
if (Input.GetKey(KeyCode.W)) // 「W」キーを押している間、前に進む
{
transform.position += transform.forward * moveSpeed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.S)) // 「S」キーを押している間、後ろに進む
{
transform.position -= transform.forward * moveSpeed * Time.deltaTime;
}
}
・ カメラを左右に回転
キーボード(A / D)またはゲームパッドのスティックで前後移動できるようにします。
void Update()
{
float rotationSpeed = 100f;
if (Input.GetKey(KeyCode.A)) // 「A」キーで左に回転
{
transform.Rotate(0, -rotationSpeed * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.D)) // 「D」キーで右に回転
{
transform.Rotate(0, rotationSpeed * Time.deltaTime, 0);
}
}
プレイヤーを追従するカメラ
3Dの追従カメラ(スムーズなカメラ移動)
➡ カメラが遅れて追従することで、自然な動きになる!
using UnityEngine;
public class FollowCamera : MonoBehaviour
{
public Transform target;
public float smoothSpeed = 0.125f;
public Vector3 offset;
void LateUpdate()
{
Vector3 desiredPosition = target.position + offset;
Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);
transform.position = smoothedPosition;
}
}
2Dの追従カメラ
➡ 2Dゲームでは、カメラのZ軸を固定し、X/Y軸のみを追従させます。
void LateUpdate()
{
transform.position = new Vector3(target.position.x, target.position.y, transform.position.z);
}
FPS / TPSカメラの実装
FPSカメラ
FPSでは、カメラをプレイヤーの視点に固定し、マウスで視点を動かせるようになります。
using UnityEngine;
public class FPSCamera : MonoBehaviour
{
public float sensitivity = 2f;
private float rotationX = 0f;
void Update()
{
float mouseX = Input.GetAxis("Mouse X") * sensitivity;
float mouseY = Input.GetAxis("Mouse Y") * sensitivity;
rotationX -= mouseY;
rotationX = Mathf.Clamp(rotationX, -90f, 90f); // 上下の視点を制限
transform.localRotation = Quaternion.Euler(rotationX, 0, 0);
transform.parent.Rotate(Vector3.up * mouseX);
}
}
TPSカメラ(マウスで回転)
TPSでは、キャラクターの後方にカメラを配置し、マウスで視点を回転させます。
using UnityEngine;
public class TPSCamera : MonoBehaviour
{
public Transform target;
public float distance = 5f;
public float sensitivity = 2f;
private float angleX = 0f;
private float angleY = 0f;
void Update()
{
angleX += Input.GetAxis("Mouse X") * sensitivity;
angleY -= Input.GetAxis("Mouse Y") * sensitivity;
angleY = Mathf.Clamp(angleY, -20f, 80f);
Quaternion rotation = Quaternion.Euler(angleY, angleX, 0);
Vector3 position = target.position - (rotation * Vector3.forward * distance);
transform.position = position;
transform.LookAt(target);
}
}
Cinemachineを使った高度なカメラ制御
Cinemachineの導入
➡ プレイヤーの動きに追従し、視点なカメラワークを実現!
※ いろいろあるので必要な物を選択しましょう
- Window → Package Manager開く → Unity Registryを選択
- Cinemachineと検索して「Install」
- GameObject → Targeted Cameras → Cinemachine → FreeLook Camera
Cinemachineの特徴
・ターゲットを設定するだけで自動追尾可能
・ズームやカメラの揺れ(Shake)を簡単に追加
・スクリプト不要でスムーズなカメラワークが可能
まとめ
・基本のカメラ設定をわかりやすく、適切な投影方法を選択
・スクリプトでカメラを移動・回転させる方法を習得
・追従カメラ(3D / 2D)を実装してプレーヤーを自動で追尾
・FPS/TPSカメラを実装し、プレーヤー視点での操作を可能
・Cinemachineを活用して、スクリプト不要で高度なカメラ制御を実現