【Unity】Cinemachineのカメラブレンド方法を指定する

こじゃらこじゃら

Cinemachineカメラ遷移を作ろうとしているけど、カメラが直線的にしか動かなくて困ってるの…😥
円弧を描くように動かすにはどうすればいいの~?

このはこのは

バーチャルカメラのBlend Hintの設定を変えれば可能だわ!初期値では直線移動になっているの。

Cinemachineでは、複数のバーチャルカメラ間を徐々に遷移させて切り替えたり、ブレンドしたりできます。初期設定では、先の動画のようにカメラ間の位置は直線的にブレンド(線形補間)されます。

このブレンド方法は、バーチャルカメラのTransitions > Blend Hint項目から設定可能です。

初期設定を含めて4種類のブレンド方式が指定できます。Blend HintにSpherical PositionCylindrical Positionを設定すれば、円弧を描くようにカメラ位置がブレンドされます。

本記事では、4種類のブレンド方式の挙動について解説し、設定上の注意点についても触れておきます。

UCL UCL

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

動作環境
  • Unity2021.1.16f1
  • Cinemachine2.7.5

スポンサーリンク

バーチャルカメラ間のブレンドについて

Cinemachineでは、複数のバーチャルカメラ情報をブレンドし、補間することができます。

ブレンド処理では、次のような情報の補間を行っています。

  • カメラ位置や向き
  • 追従対象、注視点の位置
  • 視野角などのレンズ情報

これらの情報のうち、カメラ位置や向きの補間方法は、バーチャルカメラオブジェクトのCinemachineVirtualCameraコンポーネント > Transitions > Blend Hint項目から設定します。

参考:Enum CinemachineVirtualCameraBase.BlendHint| Cinemachine | 2.6.17

バーチャルカメラ間のブレンド処理は、Cinemachine Brainによるカメラ遷移をはじめ、グループ化されたバーチャルカメラ(Cinemachine Mixing CameraCinemachine Blend List Camera等)で使用されています。

このはこのは

次は4種類のブレンドの動きについて見ていくね!

4種類のブレンドの挙動

Blend Hintには、NoneSpherical PositionCylindrical PositionScreen Space Aim When Targets Differの4種類のブレンド方式を設定することができます。

各ブレンド方式の挙動を実際に確認しながら解説していきます。

None(線形補間)

2つのバーチャルカメラ位置を線形補間でブレンドする方式です。バーチャルカメラを結ぶ線分に沿って移動するようになります。Blend Hintの初期値です。

Spherical Position(球面線形補間)

2つのバーチャルカメラ位置を球面線形補間するブレンド方式です。球面に沿ってカメラが移動するようになります。

球面の中心点は注視点(バーチャルカメラのLook At)となります。カメラ間の注視点が異なる場合、注視点自体が線形補間されます。

動画の例では、ユニティちゃんが注視点のため、ユニティちゃんを中心とした球面に沿ってカメラ位置が補間されています。同じ高さのカメラ位置をブレンドしていますが、注視点と球面を結ぶ軸周りで回転するため、やや斜め上に円弧を描いて移動しています。

Cylindrical Position(円筒補間)

2つのバーチャルカメラ位置を円筒補間するブレンド方式です。カメラが円柱に沿って移動するようになります。

Spherical Position(球面線形補間)との違いは、カメラが沿う曲面が球から円柱になったところです。円柱の中心軸は注視点を通り、地面に垂直です。 そのため、同じ高さのカメラ移動では真横に円弧を描く挙動になります。

Screen Space Aim When Targets Differ(スクリーン空間基準の向きで補間)

2つのバーチャルカメラのLook Atが異なる場合、スクリーン空間を基準にカメラの照準を補間する方式です。カメラ位置はNoneと同じ線形補間になります。

このブレンド方式にすることで、カメラの向きを一定速度で回転させるような補間ができます。

Noneの場合

Screen Space Aim When Targets Differの場合

動画のように、注視点を結ぶ線分付近にカメラが配置されていると違いを感じやすいでしょう。

Noneの場合は注視点を結ぶ線分上を等速で移動させているため、カメラ付近に注視点が近づくほどカメラの回転が速くなっています。

一方、Screen Space Aim When Targets Differの場合はカメラの回転速度が一定になるように制御されています。

異なるBlend Hintが設定されている場合

ブレンド方法は、ブレンド対象のバーチャルカメラのBlend Hintの設定値に基づいて決定されることが分かりました。

しかしながら、各々のバーチャルカメラに対して設定するため、2つのバーチャルカメラのBlend Hint値が異なる場合も考えられます。

この場合、次のルールでブレンド処理が行われます。

  • Cylindrical PositionSpherical PositionNoneの順に優先順位がある
  • カメラ位置のブレンドは、上記3種類のうち優先順位の高いブレンド方式が選択される
  • Screen Space Aim When Targets Differはカメラ向きのブレンド設定なので、上記3つとは独立している
  • Screen Space Aim When Targets Differそれ以外の組み合わせの場合、カメラ向きはScreen Space Aim When Targets Differのブレンドで、カメラ位置はもう一方の設定値のブレンドで同時実行される

やむを得ず異なるBlend Hint値でバーチャルカメラをブレンドする場合、上記に注意しておくと良いでしょう。

さいごに

本記事では、Cinemachineバーチャルカメラ間のブレンド方式の設定方法とその挙動について解説しました。

ブレンド動作は、各バーチャルカメラのBlend Hintの設定に基づいて行われます。異なるBlend Hint値のバーチャルカメラ同士をブレンドする場合は挙動が複雑なので注意が必要です。

また、ブレンド方式のSpherical PositionとCylindrical Positionは一見すると紛らわしいですが、違いを理解した上で使い分けられると効果的なカメラワークが実現できるようになるでしょう。

参考サイト

スポンサーリンク