【Unity】障害物に隠れないカメラを自動選択するCinemachine Clear Shot

キャラが建物内に入ったときなどにCinemachineカメラを自動で切り替えるようにしたいの。

Cinemachine Clear Shotを使えばこの辺が楽にできるわ!

Cinemachineには、障害物にキャラクターが隠れたときなどに、障害物に隠れていないカメラワークを自動選択できるCinemachine Clear Shot Cameraが用意されています。

これを用いると、先の動画のようなカメラワークの切り替えを自動的に行うことができるようになります。

内部的には、各バーチャルカメラのショット品質を障害物などを考慮しながら評価し、品質が最も高いバーチャルカメラを選択するような処理を行っています。

参考:Cinemachine Clear Shot Camera | Cinemachine | 2.6.0

本記事では、Cinemachine Clear Shotを用いて、品質の高いカメラに自動的に切り替える動作を実現する手順を解説していきます。

この作品はユニティちゃんライセンス条項の元に提供されています

動作環境
  • Unity2021.2.0f1
  • Cinemachine2.8.2

前提条件

次のようなキャラクター操作をするシーンがあらかじめセットアップされているものとします。

また、本記事の手順を進めるにあたって、Cinemachineパッケージが必要ですのでインポートしておいてください。

インポート方法が分からない方は、以下記事を参照してください。

【Unity】滑らかに(遅れて)追従するカメラを簡単に実装する方法
Cinemachineを用いてキャラクターを追従するカメラワークを実装する方法の解説記事です。 キャラクターを追従するカメラワークはスクリプトでも実装できますが、Cinemachineを使うことで次のメリットが得られます ...

Cinemachine Clear Shot Cameraの配置

トップメニューからGameObject > Cinemachine > ClearShot Cameraの順に選択します。

すると、CM ClearShot1という名前で、バーチャルカメラCinemachine Clear Shotが配置されます。

子バーチャルカメラの配置

Cinemachine Clear Shotは、子階層に配置されたバーチャルカメラを切替える形で動作します。

そのため、切替対象のバーチャルカメラをCM ClearShot1の下に配置していきます。初期設定では、子バーチャルカメラが1個だけ配置されています。

本記事では、次のように定点カメラを3つ配置することにしました。

バーチャルカメラの設定が分からない方は、以下記事を参考に行ってください。

【Unity】滑らかに(遅れて)追従するカメラを簡単に実装する方法
Cinemachineを用いてキャラクターを追従するカメラワークを実装する方法の解説記事です。 キャラクターを追従するカメラワークはスクリプトでも実装できますが、Cinemachineを使うことで次のメリットが得られます ...

Cinemachine Collider Extensionの設定

ここまでの手順を行っただけでは、各カメラのショット品質が評価されません。

ショット品質を評価するためには、Cinemachine Clear Shotまたは子バーチャルカメラにCinemachine ColliderのExtensionを追加して設定する必要があります。

全カメラ同じ設定にしたい場合はCinemachine Clear Shot自体に子バーチャルカメラそれぞれ個別の設定をしたい場合は各子バーチャルカメラ全てに追加して設定します。

Cinemachine Clear Shotを追加したときにデフォルトで子階層に配置されるCM vcam1には、このExtensionが設定されています。

Cinemachine Collider Extensionは、バーチャルカメラの障害物検知や回避などに用いられる機能拡張ですが、ショット品質の評価も兼ねています。

バーチャルカメラコンポーネントのExtensions > (select)をクリックし、一覧からCinemachineColliderを選択することでExtensionを追加できます。

今回は、ショット品質の評価のみを行うため、障害物回避は無効化された状態になっています。

この中で特にショット品質の評価にかかわる設定項目は、Shot Evaluation > Optimal Target Distanceです。

これは、この距離に近づくほど高いショット品質を与えるという設定項目です。

参考:Cinemachine Collider | Cinemachine | 2.6.0

0(初期設定)にすると、距離による判定を無効化できます。

その他の項目の詳細については、以下記事をご覧ください。

【Unity】Cinemachineカメラが障害物にめり込まないようにする
Cinemachineで制御するカメラが障害物にめり込まないようにしたい場合があります。 このような場合、Cinemachine Colliderという機能拡張(Extension)を使えば実現できます。 障害物の回避は ...

実行結果

ここまで正しく手順を設定すると、キャラクターが障害物に隠れた際に自動的にショット品質の高いカメラに切り替わるようになります。

上記はOptimal Target Distanceが0の場合ですが、これを1に設定すると、障害物で遮られなくても距離が1に近づいたときにカメラが切り替わるようになります。

さいごに

Cinemachine Clear Shot Cameraを使うと、障害物に隠れていないカメラワークに自動的に切り替えるような動作を実現できます。

障害物が場所など細かくカメラワークを切替えたい場合などに重宝するかもしれません。

Cinemachine ColliderのExtensionを忘れると、ショット品質の評価が正しく行われないことにご注意ください。

関連記事

【Unity】Cinemachineカメラが障害物にめり込まないようにする
Cinemachineで制御するカメラが障害物にめり込まないようにしたい場合があります。 このような場合、Cinemachine Colliderという機能拡張(Extension)を使えば実現できます。 障害物の回避は ...

参考サイト