以前紹介したカメラを振動させるアプローチの少し異なるバージョンです。
瞬間的ではない振動を表したい
以前紹介したImpulseですが、その名の通り瞬間的な力による振動を表現しています。
大抵のゲームでは振動は「何らかのトリガーによって引き起こされる」物ですので殆ど問題無いと思いますが、演出的な要因で振動が必要という事もあります。
例えばガチャの演出で、なにかが起こる前触れとしての振動や、単純にストーリー的に地震等の演出をしたい場合です。
前者は「振動がだんだん強くなる」後者は「振動が常に一定発生する」など、どちらもImpulseでは若干面倒な表現になります。
また長時間続く振動の場合は、こちらの方が何かと都合が良いケースもあります。例えば下の動画ではImpulseではなく今回の手法を採用しています。Impulse連続するの面倒だったので
Rigidbodyの動きをRecorderでAnimationClipへ変換、Timelineに乗せてカメラの動きを少しつける。
— 椿 (@tsubaki_t1) July 17, 2018
動きを確認しながら演出を調整できるし、物理演算の精度をメチャ高くしても実行時の負荷はそこまで高くならない pic.twitter.com/pAprNZElJt
連続した揺れはCinemachine Noiseを使う
揺れが連続している場合、CinemachineのNoiseを使用します。これで、Cinemachineが有効な間は連続して一定の強度で揺れます。
- Cinemachine > Create Virtual Cameraで、Virtual Cameraを作成
- Basic Multi Channel Perlimを選択
- Noise Profileを6D Shakeに指定
- 揺れ幅や切り返し回数を強化
これでカメラが振動するようになります。
振動の状態を切り替える(Timeline)
まずTimelineで振動状態と非振動状態を切り替えます。切り替え方は単純で、TimelineでVirtual Camera同士をブレンドするだけです。
その時、座標だけでなく振動のパラメータもブレンドしていくので、少しづつ振動が強くなっていくといった表現が実現出来ます。
この時、次の切り替え先のカメラが座標は同じでズームしているような場合、上のような「ズームしつつカメラの振動が強化される」といった、良く言えばなんかワクワクする演出が実現できます。
振動の状態を切り替える(Timeline以外)
Timelineを使用した場合、トラックでタイミングを調整できるので非常に簡単に振動のタイミングが制御出来るのですが、Timelineを使用しない場合…例えば普通のゲームの場合はどうでしょう。
この場合、Cinemachine MixingCameraを使用するのが良さそうです。
Mixing Cameraは子となる複数のVirtual Cameraを重みでブレンドする機能で、Cinemachineでよくある「カメラ同士の切り替え」よりもタイミング制御がやりやすくなっています。
要するに
- 複数のカメラでプレイヤーを追跡する
- 追跡するカメラ毎に振動あり・無しが異なる
- 重みで振動あり・振動なしをブレンドする
という感じです。
ただしTimelineを代表とする「演出」ではなく任意の操作が割り込む「ゲームプレイ」の場合、常に振動するカメラは非常に邪魔になるかもしれません。普通にImpluse使ったほうが良いように思います。