【Unity】Cinemachineを使って複数のカメラを切り替える方法

Unity

スポンサーリンク

※Cinemachineのインストール方法は記載してません。

Cinemachineを使って複数のカメラを切り替える方法を紹介します。(プレイヤーが物に近づいたときに他のカメラに切り替えてフォーカスするなど)

完成動作

対象が赤いGameObject(Cylinder)に近づいたらカメラが切り替わります。

作り方

1.シーンに各オブジェクトを配置

1-1.今回はunity-chanが赤いGameObject(Cylinder)に近づくとカメラが切り替わるようにします。

2.Virtual Cameraを2つ作成し位置を適宜整える

2-1."Cinemachine"→"Create Virtual Camera"を押下

2-2."CM vcam1″が作成される。

2-3."CM vcam1″の視点を適宜調整する。(今回は以下のような視点にした。)

2-4.同様にもう一つ"Virtual Camera"を作成する。("CM vcam2″ができる)

2-5."CM vcam2″の視点を適宜調整する。(今回は以下のような視点にした。)

2-6.今回は"CM vcam1″も"CM vcam2″も"Follow"と"Look At"プロパティは何も入れないので、それぞれの"Body"と"Aim"プロパティは"Do nothing"にする。

2-7.ゲーム開始時や切り替え時に不具合が出ないように、"CM vcam2″の"Priority"プロパティの値を"CM vcam1″よりも小さくしておく。(今回は5にした)
   ※"Priority"プロパティの値が大きい方が優先して表示される。

3.カメラを切り替える範囲を調整

カメラを切り替える範囲を作成する。

3-1.空のGameObjectを作成して、

3-2.空のGameObjectの名前を"Switch Area"とする。

3-3."Switch Area"にColliderコンポーネントを追加(今回は"Sphere Collider"を追加)

3-4.Colliderの範囲を適宜調整(今回は以下の緑の枠の範囲にした。この範囲にunity-chanが入ったらカメラが"CM vcam1″から"CM vcam2″に切り替わるようにする。)

3-5."Is Trigger"プロパティにチェックを入れる。これでColliderをunity-chanがすり抜けるようになる。

4.カメラを切り替えるスクリプトを作成

4-1.SwitchCamera.csという名前のスクリプトを作成して、以下のコードを記載する。

using UnityEngine;
using Cinemachine;

public class SwitchCamera : MonoBehaviour
{
    [SerializeField]
	[Tooltip("切り替え後のカメラ")]
    private CinemachineVirtualCamera virtualCamera;

	// 切り替え後のカメラの元々のPriorityを保持しておく
	private int defaultPriority;

	// Start is called before the first frame update
	void Start()
	{
		defaultPriority = virtualCamera.Priority;
	}

	/// <summary>
	/// Colliderの範囲に入り続けている間実行され続ける
	/// </summary>
	/// <param name="other"></param>
	private void OnTriggerStay(Collider other)
	{
		// 当たった相手に"Player"タグが付いていた場合
		if (other.gameObject.tag == "Player")
		{
			// 他のvirtualCameraよりも高い優先度にすることで切り替わる
			virtualCamera.Priority = 100;
		}
	}

	/// <summary>
	/// Colliderから出たときに実行される
	/// </summary>
	/// <param name="other"></param>
	private void OnTriggerExit(Collider other)
	{
		// 当たった相手に"Player"タグが付いていた場合
		if (other.gameObject.tag == "Player")
		{
			// 元のpriorityに戻す
			virtualCamera.Priority = defaultPriority;
		}
	}
}

4.スクリプトをアタッチ

4-1."Switch Area"GameObjectにSwitchCameraスクリプトをアタッチ

4-2."Virtual Camera"プロパティに切り替えたいカメラ(今回は"CM vcam2″)を入れる。

5.プレイヤーオブジェクトのTagに"Player"を設定

5-1.プレイヤーオブジェクト(今回はunitychan)のTagに"Player"を設定

完成

これでunity-chanが赤いGameObjectに近づくと、カメラが切り替わる。

★補足

今回、カメラが切り替わる際はゆっくりと切り替わるが、一気に切り替えたい場合や、カメラごとにどのように切り替えたいかを制御したい場合。

・すべてのカメラの切り替えを一括で指定したい場合

“Main Camera"ゲームオブジェクトの"Default Blend"を変更
例えば"Cut"にすると、切り替えが一瞬で行われる。

・カメラごとに切り替え方を指定したい場合

“Main Camera"ゲームオブジェクトの"Custom Blends"プロパティに以下のように適宜設定する。

Unity

Posted by ton