Unity入門

【Unity】Cameraの使い方完全ガイド|追従・回転・FPS/TPS・Cinemachine対応の実装方法まで解説

使用環境

・Unity Editor:2021.3.18f1

この記事でわかること

  • UnityのCameraの基本設定
  • スクリプトでCameraを移動・回転させる方法
  • プレイヤーを追従するカメラの作り方(3D / 2D)
  • FPS / TPSカメラの実装方法
  • Cinemachineを使ったカメラ制御の最適化

※ Transformに関しては以下のサイトを参考にしてください。

UnityのCameraとは?

ピッグダディ

今回は「Unityのカメラの使い方」について、一緒に見ていきましょう。
カメラの設定がうまくいかないと、せっかくのゲームも見づらくなってしまいますよね。

ピッグボーイ

あ、それわかります!
プレイヤーを追いかけるカメラにしたかったんですけど、
急に動いたりついてこなかったりして、すごく違和感があって…

ピッグガール

私はFPSやTPSの視点を作ってみたくて、
よく聞くCinemachineって使ったほうがいいのかなって気になってます。

ピッグダディ

いい質問ですね。
この記事では、カメラの基本設定からスクリプトでの操作、プレイヤー追従、FPS/TPS視点、そしてCinemachineを使ったカメラ制御まで、丁寧に解説していきますね。

UnityのCameraの使い方

Cameraの基本設定

Cameraの基本設定は、Cameraコンポーネントから調整できます。

  • Projection(投影方法): Perspective(透視投影) / Orthographic(平行投)
  • Field of View(FOV): 大きくすると遠近感が強くなる(Perspectiveのみ)
  • Near(ニアクリップ): これより手前のオブジェクトは描画されない
  • Far(ファークリップ): これより奥のオブジェクトは描画されない

3Dでは「Perspective」、2Dでは「Orthographic」が一般的です!
FOVを大きくすると広角になり、逆に小さくすると望遠レンズのような効果を得られます!

Unity Cameraの設定の画像

Cameraの移動・回転をスクリプトで制御

Cameraをスクリプトで動かす場合、transform.positionやtransform.rotationを使用します。
※ このスクリプトは「Main Camera」にアタッチしてください!

・ 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;
    }
}


・ Cameraを左右に回転
キーボード(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);
    }
}

プレイヤーを追従するCamera

3Dの追従Camera(スムーズなCamera移動)

Cameraが遅れて追従することで、自然な動きになる!

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の追従Camera

➡ 2Dゲームでは、CameraのZ軸を固定し、X/Y軸のみを追従させます。

void LateUpdate()
{
    transform.position = new Vector3(target.position.x, target.position.y, transform.position.z);
}

FPS / TPSCameraの実装

FPSCamera

FPSでは、Cameraをプレイヤーの視点に固定し、マウスで視点を動かせるようになります。

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);
    }
}

TPSCamera(マウスで回転)

TPSでは、キャラクターの後方にCameraを配置し、マウスで視点を回転させます。

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を使った高度なCamera制御

Cinemachineの導入

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

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

Cinemachineの特徴

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

まとめ

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