【Unity】CinemachineVirtualCameraを使ったカメラ制御とズーム機能

2024年9月30日

UnityのCinemachineを使用すると、Main Cameraの位置や動作をプログラムで直接制御する必要がなくなります。Cinemachineはカメラのフォーカスや追従、ズームなどの設定を容易に行うことができるため、開発者はより直感的にカメラワークをコントロールできます。本資料では、CinemachineVirtualCameraの使い方と、カメラのFOVを制御してズームインやズームアウトを実現する方法について解説します。

1. CinemachineVirtualCameraの概要

CinemachineVirtualCameraは、Unityの標準機能であるCinemachineの中核的なコンポーネントで、カメラの挙動を簡単に設定できます。CinemachineVirtualCameraを使うことで、プログラミングやアニメーションを必要とせずに、フォローや注視するオブジェクトを指定して、シネマティックなカメラワークを実現することが可能です。

主な機能:

  • Follow(フォロー): カメラが追従するオブジェクトを指定
  • Look At(注視): カメラが注視するオブジェクトを指定
  • Lens Settings(レンズ設定): カメラのFOVやクリップ平面の設定
  • Priority(優先度): 複数のカメラが存在する場合、優先度が高いカメラがアクティブ

2. FOV(Field of View)について

FOV(視野)は、カメラが捉える視界の広さを決定する重要なパラメータです。FOVの値を変更することで、画面に表示されるオブジェクトのサイズ感やカメラのズーム具合が変わります。

  • FOVの値が小さくなるとズームインし、対象物が大きく映ります。
  • 逆に、FOVの値が大きいとズームアウトし、より広い範囲が表示されます。

3. ターゲットへのズームイン

UnityのCinemachineを使用して、ターゲットにズームインするためには、CinemachineVirtualCameraのLens設定でFOVを調整します。以下はその手順です。

ズームイン設定手順:

  1. Cinemachine Virtual Cameraを選択: Unityエディター内でズームしたいCinemachine Virtual Cameraを選びます。
  2. Lensセクションを探す: インスペクター内のLens設定を探します。
  3. Field of Viewを調整: FOVの値を小さく設定してズームイン。逆に値を大きくすればズームアウトになります。

DampingやFramingのオプションを調整することで、ターゲットへのスムーズなズームインやズームアウトのエフェクトも追加できます。


5. コードによるズームイン・ズームアウトの制御

プレイヤーの操作やイベントに応じて、動的にカメラをズームイン・ズームアウトしたい場合、以下のスクリプトを使うと実現できます。

using UnityEngine;
using Cinemachine;

public class CameraZoom : MonoBehaviour
{
    public CinemachineVirtualCamera virtualCamera;
    public float zoomInFOV = 30f;    // ズームイン時のFOV値
    public float zoomOutFOV = 60f;   // ズームアウト時のFOV値
    public float zoomSpeed = 10f;    // ズームの速さ

    void Update()
    {
        if (virtualCamera != null)
        {
            // 'Z'キーを押すとズームイン
            if (Input.GetKey(KeyCode.Z))
            {
                virtualCamera.m_Lens.FieldOfView = Mathf.Lerp(virtualCamera.m_Lens.FieldOfView, zoomInFOV, Time.deltaTime * zoomSpeed);
            }
            // 'X'キーを押すとズームアウト
            else if (Input.GetKey(KeyCode.X))
            {
                virtualCamera.m_Lens.FieldOfView = Mathf.Lerp(virtualCamera.m_Lens.FieldOfView, zoomOutFOV, Time.deltaTime * zoomSpeed);
            }
        }
    }
}

コード解説:

  • zoomInFOVzoomOutFOV: それぞれズームインとズームアウト時のFOV値を設定します。
  • Mathf.Lerp: 時間経過と共に滑らかにFOVを変更し、自然なズーム効果を得られるようにします。
  • キー入力に応じて、Zキーでズームイン、Xキーでズームアウトが可能です。

6. まとめ

Cinemachineを活用することで、複雑なカメラ制御をシンプルかつ効果的に実装でき、ゲーム内の体験を向上させることができます。特にCinemachineVirtualCameraは、プログラミング知識が少ない開発者やデザイナーでも直感的に使用できる強力なツールであり、映画的なカメラワークを実現できます。また、スクリプトを使用すれば、より柔軟なカメラ制御が可能となり、プレイヤーのアクションやゲームイベントに応じたカメラ操作が実現できます。


Unity

Posted by hidepon