【Unity】カメラの追従方法!プレイヤーの回転にも対応

【PR スプリングセール開催中】

Unityアセットストアで、5月9日0時まで多数の人気アセットが50%オフで販売されています!この機会に手に入れましょう!
50%オフのアセットはこちら

はじめに

カメラをキャラクターに追従させる方法を3つ紹介します。いずれの方法も難しくありませんので、自分に合う方法を試してみましょう。

  1. カメラを追従対象の子オブジェクトに設定する方法
  2. スクリプトからカメラ位置を指定する方法
  3. Cinemachineを使用する方法

それぞれ見ていきましょう!

追従方法

1. カメラをプレイヤーの子オブジェクトに設定する

最も簡単な方法です。カメラをプレイヤーの子オブジェクトに設定することで、子オブジェクトが移動すると、カメラの位置も追従します。

Cubeを動かすと、カメラが追従します。

ただし、簡単にできる分デメリットもあり、回転の影響も受けます。

これだとボールが転がる際に、カメラも一緒に回転してしまいます。

2. スクリプトでカメラの位置を指定する

回転を固定するには、スクリプトからカメラの位置を制御する方法が有効です。

さらに、カメラの移動も滑らかに行うことが可能です。

以下のスクリプトをカメラにアタッチします。

using UnityEngine;

public class CameraController : MonoBehaviour
{
    public Transform player;  // プレイヤーのTransform
    public Vector3 offset;  // プレイヤーとカメラの相対位置
    public float smoothTime = 0.3f;  // カメラがプレイヤーを追跡する際のスムーズさの調整用パラメータ

    private Vector3 velocity = Vector3.zero;  // カメラ移動時の速度ベクトル

    // プレイヤー移動後にカメラ移動をさせたいので、LateUpdateを使う
    void LateUpdate()
    {
        // プレイヤーの位置にカメラを追従させる
        Vector3 targetPosition = player.position + offset;
        targetPosition.z = transform.position.z;
        transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothTime);
    }
}

インスペクターでプレイヤーのTransformとプレイヤーとカメラの相対位置を指定してください。

offsetには、プレイヤーとカメラの相対位置をベクトルで指定します。

斜め上からプレイヤーをカメラで撮りたいなど、角度をつけたい場合は、事前にインスペクターでカメラの角度を設定しておきましょう。

smoothTimeは、カメラがプレイヤーに追従する際のスムーズさを調整するためのパラメータです。値を大きくすると、追従がゆっくりとなり、値を小さくすると、追従が速くなります。

3. Cinemachineを利用する

回転を固定させるもう一つの方法は、Cinemachineを使用する方法です。

Cinemachineとは、Unity公式のアセットで、様々なカメラの制御がノーコードで簡単にできます。

Cinemachineのインポート

使用するには、Window > Package Managerを開き、Unity Registryからインポートします。

バーチャルカメラの作成

ヒエラルキーから、バーチャルカメラを作成します。

作成したバーチャルカメラのインスペクターから、FollowとLook Atに、追従させる対象のオブジェクトをドラッグ&ドロップします。

位置と角度の設定

カメラと追従対象との相対距離については、以下のオフセットから設定できます。

Bodyが位置、Aimが回転の設定です。

実行結果

スムーズに追従しました!

おわりに

カメラを追従させる方法の紹介でした。

おすすめは、Cinemachineを使った方法です。ノーコードでカメラの追従の仕方も自在に設定できます。

2Dゲームでの、高度なカメラ制御ができるアセットはこちらです。

Pro Camera 2D – The definitive 2D & 2.5D camera plugin for Unity
タイトルとURLをコピーしました