MRが楽しい

MRやVRについて学習したことを書き残す

UnityのStarterAssetsを使って一人称視点と三人称視点を切り替える

本日は Unity の小ネタ枠です。
UnityのStarterAssetsを使って一人称視点と三人称視点を切り替える方法を記事にします。

前回記事

以下の前回記事の続きです。
bluebirdofoz.hatenablog.com

三人称視点のシーンに一人称視点の設定を追加する

初めに三人称視点のシーンに一人称視点の設定を追加します。
三人称視点のシーンを開きます。

カメラ追従は Cinemachine の Virtual Camera を使って設定されています。
三人称視点のシーンに以下の一人称視点が設定されたプレハブをドラッグして追加します。

Assets/StarterAssets/FirstPersonController/Prefabs/PlayerFollowCamera.prefab

追加したプレハブには追従対象の参照が切れています。
CinemachineVirtualCamera コンポーネントの Follow フィールドに PlayerCameraRoot の参照を設定してアバターの頭部に追従するよう設定します。

カメラを切り替えてみる

この設定で一人称視点が機能するか試してみます。
CinemachineVirtualCamera の Priority フィールドでカメラ設定の優先度を変更できます。
一人称視点の Priority に三人称視点の Priority より高い値を設定してみます。

この状態でシーンを再生してみます。
以下の通り一人称視点の設定が優先され、一人称視点でシーンが開始されました。

再生中にカメラを切り替える

Priority をシーンの再生中に変更すればランタイムでも視点が切り替わります。
カメラの切り替わり演出は Cinemachine Brain で設定されていて、デフォルトではカメラがスムーズに移動して視点が切り替わるように設定されています。

今回はスクリプトから直接変更して動作を確認してみます。
ChangeCameara 関数を実行すると視点の Priority を変更する以下のサンプルスクリプトを作成しました。
・CameraChanger.cs

using Cinemachine;
using UnityEngine;

public class CameraChanger : MonoBehaviour
{
    /// <summary>
    /// 一人称視点の参照
    /// </summary>
    [SerializeField]
    private CinemachineVirtualCamera firstPersonCamera;
    
    /// <summary>
    /// 三人称視点の参照
    /// </summary>
    [SerializeField]
    private CinemachineVirtualCamera thirdPersonCamera;

    [SerializeField]
    private bool isFPS;

    private void Start()
    {
        SetFirstPersonCamera();
    }

    /// <summary>
    /// 視点の切り替えを実行する
    /// </summary>
    [ContextMenu("SwitchCamera")]
    public void SwitchCamera()
    {
        if (isFPS)
        {
            SetThirdPersonCamera();
        }
        else
        {
            SetFirstPersonCamera();
        }
    }

    /// <summary>
    /// 一人称視点に切り替える
    /// </summary>
    private void SetFirstPersonCamera()
    {
        firstPersonCamera.Priority = 10;
        thirdPersonCamera.Priority = 0;
        isFPS = true;
    }
    
    /// <summary>
    /// 三人称視点に切り替える
    /// </summary>
    private void SetThirdPersonCamera()
    {
        firstPersonCamera.Priority = 0;
        thirdPersonCamera.Priority = 10;
        isFPS = false;
    }
}

シーンに適当なゲームオブジェクトを作成してスクリプトを追加して一人称視点、三人称視点の CinemachineVirtualCamera の参照を設定します。

動作確認

シーンを再生して視点切り替えの動作を確認してみます。
起動時は一人称視点でシーンが開始します。

シーンの再生中、コンテキストメニューから ChangeCameara 関数を実行すると三人称視点にスムーズに移行するのが確認できました。