📸 カメラの追従設定

Unity

カメラの追従を実現する方法はいくつかありますが、最も簡単で一般的なのは、「親子関係」を利用する方法と、「専用のスクリプト」を使う方法の2つです。

1. 👫 方法A: 親子関係を利用する(簡易的な追従)

これは、カメラをプレイヤーの子オブジェクトにすることで、親であるプレイヤーが動けば、カメラも自動的にその移動・回転についていくようにする、最も手軽な方法です。

  1. Hierarchyビューで、メインカメラ(通常は Main Camera)をプレイヤーオブジェクト(例:Cube)の上にドラッグ&ドロップします。
  2. これにより、カメラがプレイヤーのになり、プレイヤーがになります。
  • 利点: スクリプトは不要です。プレイヤーが移動・回転すると、カメラも同じように移動・回転します。
  • 欠点: プレイヤーが回転すると、カメラも一緒に回転してしまい、視点が固定されません。三人称視点(TPS)ゲームでは使いにくい場合があります。

2. 📝 方法B: スクリプトによるスムーズな追従(推奨)

カメラの位置をプレイヤーの少し後ろに保ちつつ、プレイヤーの動きに合わせて滑らかに移動させる、より本格的な方法です。これには専用のC#スクリプトが必要です。

Step 1: CameraFollow.csの作成

  1. 新しいC#スクリプトを作成し、「CameraFollow」という名前を付けます。
  2. このスクリプトをMain Cameraにアタッチします。

Step 2: コードの記述

CameraFollow.csを開き、以下のコードを記述します。

C#

using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    // Inspectorからプレイヤーオブジェクトを設定できるようにする
    public Transform target; 
    
    // Inspectorからカメラとプレイヤーとの距離を調整できるようにする
    public Vector3 offset = new Vector3(0f, 5f, -10f); 

    // カメラがターゲットに追いつく速さ
    public float smoothSpeed = 0.125f; 

    // 物理移動(FixedUpdate)後にカメラを動かすのがベストプラクティス
    void LateUpdate()
    {
        if (target == null) return; // ターゲットが設定されていなければ何もしない

        // 1. 追跡すべき理想的な位置を計算
        // ターゲットの位置にオフセットを加算した場所が理想位置
        Vector3 desiredPosition = target.position + offset;

        // 2. 現在の位置から理想位置へ、滑らかに(Lerpを使って)移動させる
        // Vector3.Lerp(現在の位置, 理想の位置, 補間係数)
        Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);
        
        // 3. カメラの位置を更新
        transform.position = smoothedPosition;

        // (オプション) 常にターゲットを見るようにする
        transform.LookAt(target);
    }
}

Step 3: Inspectorでの設定

  1. Unityエディタに戻り、Main Cameraを選択します。
  2. InspectorビューのCamera Followコンポーネントを見てください。
  3. Targetという空欄があるので、Hierarchyビューからプレイヤーオブジェクト(例:Cube)をドラッグ&ドロップして設定します。
  4. Offsetの値を変更して、カメラがプレイヤーからどのくらい離れた位置に配置されるかを調整できます。
    • 例:Y: 5(プレイヤーより5m上)、Z: -10(プレイヤーより10m後方)

💡 LateUpdate()の重要性

このスクリプトではUpdate()ではなく**LateUpdate()**を使っています。これはUnityの処理順序に関係します。

  • Update()/FixedUpdate():プレイヤーの移動処理(PhysicsMovementスクリプトなど)が実行される。
  • LateUpdate()すべてのUpdate()処理が終わった後に実行される。

カメラの追従は「プレイヤーが完全に移動を終えた後の位置」を基に行う必要があるため、LateUpdate()を使うのが最も滑らかで安定したカメラワークを実現するベストプラクティスです。


これで、プレイヤーが移動しても、カメラがスムーズに追いかけてくるようになりました!

コメント