Unity入門

【Unity】Cameraの使い方 | 3D・2D、スクリプト、移動・回転・追従、FPS・TPS、Cinemachine

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を大きくすると広角になり、逆に小さくすると望遠レンズのような効果を得られます!

Unity Cameraの設定の画像

カメラの移動・回転をスクリプトで制御

カメラをスクリプトで動かす場合、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の導入

プレイヤーの動きに追従し、視点なカメラワークを実現!
※ いろいろあるので必要な物を選択しましょう

  1. Window → Package Manager開く → Unity Registryを選択
  2. Cinemachineと検索して「Install」
  3. GameObject → Targeted Cameras → Cinemachine → FreeLook Camera

Cinemachineの特徴

ターゲットを設定するだけで自動追尾可能
ズームやカメラの揺れ(Shake)を簡単に追加
スクリプト不要でスムーズなカメラワークが可能

まとめ

基本のカメラ設定をわかりやすく、適切な投影方法を選択
スクリプトでカメラを移動・回転させる方法を習得
追従カメラ(3D / 2D)を実装してプレーヤーを自動で追尾
・FPS/TPSカメラを実装し、プレーヤー視点での操作を可能
Cinemachineを活用して、スクリプト不要で高度なカメラ制御を実現