CinemachineでClear Shotを使って対象が障害物に隠れないカメラに自動的に切り替える方法をまとめました。
- はじめに
- Clear Shotで実現できること
- Clear Shotの使い方
- どのカメラが選択されるか
- ColliderをClear ShotのGameObjectにつければ子につけなくてもよい
- 関連
- 参考
Unity2018.4.0
Cinemachine2.2.9
はじめに
この記事ではCinemachineのClear Shotという機能について説明します。
Cinemachineの基本的な使い方やVirtual Cameraの設定方法は本記事では説明しません。
これらは以下の記事にまとめていますので、必要に応じて参照してください。
Clear Shotで実現できること
CinemachineのClear ShotはCinemachineで複数のVirtual Cameraをまとめて
一つのVirtual Cameraのように振舞わせるManager Cameraという機能の一つです。
Clear Shotを使うと対象が障害物に隠れた時に、いい感じに映せる別のカメラに切り替えるカメラワークを実装できます。
Clear Shotは衝突判定のためにCinemachine Colliderの機能を使っています。
この機能については次の記事で説明しているので必要に応じて参照してください。
Clear Shotの使い方
Clear Shotを使うにはまず上部メニューからCinemachine > Create ClearShot Cameraを選択します。
するとHierarchyにClear ShotのGame Objectとその子にVirtual Cameraが一つ作られます。
Virtual Cameraは必要なだけ複製し、それぞれ位置やターゲットを設定しておきます。
設定出来たら子のVirtual CameraすべてにCinemachine Colliderをアタッチし、
そのコンポーネントのAvoid Obstaclesにチェックを入れておきます。
Cinemachine Colliderの細かい設定については次の記事を参照してください。
これでひとまず、あるカメラの対象が障害物に隠れたら別のカメラに切り替わるようになります。
ついでにカメラの切り替え時にアニメーションするように設定しておきます。
これはCinemachine Clear ShotのDefault Blendから指定できます。
アニメーションさせるにはEase In Outとかにして秒数を指定しておきます。
これでカメラが切り替わるときにアニメーションするようになりました。
ちなみにCustom Blendsを使うともっと細かく遷移を指定することもできます。
これについては次の記事を参照してください。
どのカメラが選択されるか
さてClear Shotではあるカメラが障害物により対象を映せなくなると他のカメラに遷移するわけですが、
遷移先のカメラの候補(つまり障害物の影響を受けないカメラ)が複数あった場合はどれが選ばれるのでしょうか。
このようなケースではカメラのPriorityと並び順が使われます。
まず優先されるのがPriorityです。
対象が見えているカメラの中で最もPriorityの高いカメラが選択されます。
その上で、もしPriorityが同じカメラがある場合には並び順がより上にあるカメラが選択されます。
ちなみにRandom Choiceにチェックを入れるとPriorityが同じときに並び順ではなくランダムで選択されるようです。
ColliderをClear ShotのGameObjectにつければ子につけなくてもよい
上述の手順ではすべての子Virtual CameraにCinemachine Colliderをアタッチしています。
もしすべてのCinemachine Colliderの設定が同じでよければ、
Cinemachine ColliderはClear ShotのGame Objectに一つだけアタッチすればOKです。
こうするとすべての子Virtual CameraにこのColliderがアタッチされたのと同様の挙動になります。