【Unity】Cinemachineでカメラを揺らす演出を作る

カメラを揺らすような演出を簡単に実現する方法はないの~?

CinemachineのNoiseを使えばできるわ!

Cinemachineには、衝撃や手ブレのようにカメラを揺らす機能が備わっています。これを使用すると、次の動画のような演出を簡単に実現できます。

本記事では、このようなカメラの振動演出の実現方法と、振動のバリエーションについて紹介していきます。

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

動作環境
  • Unity2021.1.12f1
  • Cinemachine2.7.4

前提条件

Cinemachineがインストールされていることを前提とします。Cinemachineのインストール方法が分からない方は、以下記事をご覧ください。

【Unity】三人称視点のカメラワークを簡単に実装する方法
UnityパッケージのCinemachineには、ゲームでよく扱われるカメラワークが用意されています。 CinemachineのFreeLook Cameraを使うと、TPSのような三人称視点のカメラワークを簡単に素早く ...

また、シーン上に予めCinemachineのバーチャルカメラが配置されているものとします。

配置していない場合は、ヒエラルキビューの+ボタン(またはGameObjectメニュー)より、Cinemachine > Virtual Cameraの順に選択し、バーチャルカメラを配置してください。

カメラ振動の設定手順

ここからは、バーチャルカメラに振動演出を適用していきます。

CinemachineVirtualCameraコンポーネントのNoise項目にBasic Multi Channel Perlinを設定します。

すると、以下のような詳細設定項目が増えます。

Noise項目に設定したBasic Multi Channel Perlinは、パーリンノイズによってカメラ振動をさせる設定です。
詳細設定については、以下公式リファレンスもご覧ください。

参考:Noise プロパティー | Cinemachine | 2.6.0

パーリンノイズの設定

Noise Profileでは、カメラ振動のパターンを選択します。
例では、カメラを6DoFで小刻みに揺らす6D Shakeを選択することにします。

Pivot Offsetには、回転方向のノイズを与える時の回転軸のオフセット座標を指定します。カメラ中心で回転させたい場合は全て0を指定すればOKです。

Amplitude Gainは、振動の振幅に掛ける係数です。例えば2を設定すると、振幅が2倍になり、2倍大きく揺れるようになります。

Frequency Gainは、振動の周波数に掛ける係数です。例えば3を設定すると、3倍速く振動するようになります。

実行結果

衝撃のような揺れが再現できるようになりました。

Pivot Offsetには0、Amplitude GainFrequency Gainには1を設定しています(初期設定)

様々なノイズの種類の紹介

Noise Profileに6D Shakeを設定すると、衝撃のような揺れを表現できますが、これ以外にもカメラの手ブレのような表現があります。

代表的なパターンを紹介します。いずれもPivot Offsetには0、Amplitude GainFrequency Gainには1を設定した状態とします。

Handheld_normal_mild

標準的な手ブレ表現です。

ほかにも、揺れの強さが異なるHandheld_normal_extremeHandheld_normal_strongがあります。

Handheld_tele_mild

遠距離に照準を合わせた時のような手ブレです。

ほかにも、揺れを強くしたHandheld_tele_strongがあります。

Handheld_wideangle_mild

回転方向に大きく揺れるタイプの手ブレ表現です。

ほかにも、揺れを強くしたHandheld_wideangle_strongがあります。

独自のノイズプロファイル

ここに挙げた以外にも、独自の揺れを作成することも可能です。
本記事では割愛しますので、必要な方は以下公式リファレンスをご覧ください。

参考:Noise Profile について | Cinemachine | 2.6.0

さいごに

Cinemachineでカメラの揺れ表現をさせる方法について解説しました。

Cinemachineがない環境では、カメラを揺らすスクリプトを独自に書かなければいけませんでしたが、Cinemachineにはこのような機能が備わっています。揺れのパターンも独自定義できるので、拡張性にも優れています。

ご参考にしていただければ幸いです。

参考サイト