※Cinemachineのインストール方法は記載してません。
Cinemachineを使って複数のカメラを切り替える方法を紹介します。(プレイヤーが物に近づいたときに他のカメラに切り替えてフォーカスするなど)
完成動作
対象が赤いGameObject(Cylinder)に近づいたらカメラが切り替わります。
作り方
1.シーンに各オブジェクトを配置
1-1.今回はunity-chanが赤いGameObject(Cylinder)に近づくとカメラが切り替わるようにします。
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-38.png)
2.Virtual Cameraを2つ作成し位置を適宜整える
2-1.”Cinemachine”→”Create Virtual Camera”を押下
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-4.png)
2-2.”CM vcam1″が作成される。
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-39.png)
2-3.”CM vcam1″の視点を適宜調整する。(今回は以下のような視点にした。)
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-40.png)
2-4.同様にもう一つ”Virtual Camera”を作成する。(”CM vcam2″ができる)
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-41.png)
2-5.”CM vcam2″の視点を適宜調整する。(今回は以下のような視点にした。)
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-42.png)
2-6.今回は”CM vcam1″も”CM vcam2″も”Follow”と”Look At”プロパティは何も入れないので、それぞれの”Body”と”Aim”プロパティは”Do nothing”にする。
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-43.png)
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-45.png)
2-7.ゲーム開始時や切り替え時に不具合が出ないように、”CM vcam2″の”Priority”プロパティの値を”CM vcam1″よりも小さくしておく。(今回は5にした)
※”Priority”プロパティの値が大きい方が優先して表示される。
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-44.png)
3.カメラを切り替える範囲を調整
カメラを切り替える範囲を作成する。
3-1.空のGameObjectを作成して、
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-46.png)
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-47.png)
3-2.空のGameObjectの名前を”Switch Area”とする。
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-48.png)
3-3.”Switch Area”にColliderコンポーネントを追加(今回は”Sphere Collider”を追加)
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-49.png)
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-50.png)
3-4.Colliderの範囲を適宜調整(今回は以下の緑の枠の範囲にした。この範囲にunity-chanが入ったらカメラが”CM vcam1″から”CM vcam2″に切り替わるようにする。)
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-51-1024x385.png)
3-5.”Is Trigger”プロパティにチェックを入れる。これでColliderをunity-chanがすり抜けるようになる。
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-52.png)
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;
}
}
}
5.スクリプトをアタッチ
5-1.”Switch Area”GameObjectにSwitchCameraスクリプトをアタッチ
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-53.png)
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-54.png)
5-2.”Virtual Camera”プロパティに切り替えたいカメラ(今回は”CM vcam2″)を入れる。
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-55-1024x314.png)
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-56.png)
6.プレイヤーオブジェクトのTagに”Player”を設定
6-1.プレイヤーオブジェクト(今回はunitychan)のTagに”Player”を設定
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-57.png)
完成
これでunity-chanが赤いGameObjectに近づくと、カメラが切り替わる。
★補足
今回、カメラが切り替わる際はゆっくりと切り替わるが、一気に切り替えたい場合や、カメラごとにどのように切り替えたいかを制御したい場合。
・すべてのカメラの切り替えを一括で指定したい場合
“Main Camera”ゲームオブジェクトの”Default Blend”を変更
例えば”Cut”にすると、切り替えが一瞬で行われる。
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-58.png)
・カメラごとに切り替え方を指定したい場合
“Main Camera”ゲームオブジェクトの”Custom Blends”プロパティに以下のように適宜設定する。
![](https://programming.sincoston.com/wp-content/uploads/2021/11/image-59.png)
コメント