Cinemachineでキャラを追いかけるカメラワークを作っているんだけど、別のキャラに切り替える方法が分からなくて困ってるの~
スクリプトから設定することになるけど簡単だわ。
次のような方法で実現可能よ。
- バーチャルカメラの追従対象を直接変更する
- 複数のバーチャルカメラのうち使用するものを選択する
Cinemachineではバーチャルカメラ という仮想的なカメラを複数持たせられる仕組みを採用しています。これにより、複数のカメラワークの切り替えが容易に実現できます。
また、バーチャルカメラの追従対象はスクリプトから読み書きできるようになっています。
この仕組みによって、次のように動的に追従対象を切り替えることができます。
本記事では、Cinemachineを使ってカメラの追従対象を切り替える方法について解説していきます。
- Unity2020.3.4f1
- Cinemachine2.6.4
この作品はユニティちゃんライセンス条項の元に提供されています
目次 非表示
前提条件
次のように、シーン内に複数のユニティちゃんがいる場面を想定します。
初期状態では、一番左のユニティちゃんをカメラが追従させることにします。
Cinemachineのセットアップや追従のさせ方が分からない方は、以下記事もあわせてご覧ください。
方法1 : バーチャルカメラの追従対象を直接書き換える
1つのバーチャルカメラを使いまわして追従対象だけをスクリプトから変更する方法です。
メリット・デメリットは次の通りです。
- メリット
- バーチャルカメラを1個用意するだけで良い
- デメリット
- カメラを瞬時にしか切り替えられない(切替アニメーションできない)
追従対象のパラメータ
バーチャルカメラはCinemachineVirtualCameraクラスのコンポーネントとしてスクリプトからアクセスできます。
スクリプトから書き換えるパラメータは次の2つです。
- Follow
- バーチャルカメラが追従する対象となるオブジェクト(Transform型)
- Followプロパティとしてアクセス可
- Look At
- バーチャルカメラが照準を合わせる対象となるオブジェクト(Transform型)
- LookAtプロパティとしてアクセス可
追従対象の切り替え処理
追従対象の切り替えは、CinemachineVirtualCameraクラスのFollowおよびLookAtプロパティを書き換えれば良いです。
次のようなコードになります。
カメラ切り替えのサンプル
画面をクリックするとカメラを切り替えるスクリプトの例です。
これを適当なゲームオブジェクトにアタッチし、Virtual CameraとTarget Listをインスペクターから設定します。
実行結果
成功すると、次のようにカメラが切り替わります。
分かりやすくするために、CinemachineのAimのDampingはあえて0にしています。
カメラの向きが一瞬で切り替わっているのが分かります。
方法2 : 複数のバーチャルカメラを切り替える
対象物ごとに追従するバーチャルカメラを用意し、バーチャルカメラをCinemachine Brain
から切り替える方法です。
こちらの方がよりCinemachineらしい使い方かもしれません。
メリット・デメリットは次の通りです。
- メリット
- カメラ切り替えの動きを細かく制御できる
- デメリット
- バーチャルカメラを追従対象の個数分用意する必要がある
バーチャルカメラの切り替え方法
各々のバーチャルカメラには優先度(Priority)が付けられています。
Cinemachine Brainからは、最も優先度が高いバーチャルカメラが選択されます。
スクリプト側からは、この優先度を書き換えることでバーチャルカメラの切り替えができます。
バーチャルカメラを切り替える際は、Cinemachine Brainに設定されているカメラブレンド情報
に基づいてアニメーションしながら切り替わります。カメラ切り替えのサンプル
方法1と同様に、画面をクリックするとカメラを切り替えるスクリプトです。
これを適当なゲームオブジェクトにアタッチし、インスペクターの項目を設定します。
実行結果
アニメーションしながら緩やかに切り替わるようになりました。
動画の例では、0.5秒かけてカメラを切り替えるようにCinemachine Brainのブレンドを設定しています。
さいごに
Cinemachineを使ってカメラの追従対象をスクリプトから切り替える方法について解説しました。
複雑なスクリプトを書くことなくカメラワークの切り替えができます。
Cinemachineはノーコーディングで優れたカメラワークを実装できるのが特徴ですが、スクリプトとの連携や拡張性にも優れているのも特徴です。