はじめに
カメラをキャラクターに追従させる方法を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ゲームでの、高度なカメラ制御ができるアセットはこちらです。