Cinemachine の使用
Cinemachine を使用するには、カメラの使用に関して新しい考え方が必要です。例えば、今まで多くの時間をカメラの細かい動作を作成することに時間を費やしていたかもしれません。しかし、Cinemachine を使用すれば、より短時間で、同等あるいはそれ以上の結果を得ることができます。
Virtual Camera
Cinemachine はカメラを新規に作成することはせず、代わりに、単一の Unity のカメラを複数のショットに設定します。これらのショットの構成を Virtual Camera (バーチャルカメラ) を使用して行います。Virtural Camera は Unity のカメラの移動、回転、設定の制御を行います。
Virtual Camera はカメラ (Camera) とは別のゲームオブジェクトであり、独立した動作をします。Virtural Camera は互いに入れ子にはなっていません。例えば、シーンは以下のようになります。
Virtural Camera が主に実行するタスクは以下の通りです。
- シーン内にカメラを配置する。
- カメラを何かに向ける。
- カメラにプロシージャルノイズを追加する。ノイズは手ブレ効果や乗り物の揺れなどをシミュレートします。
Cinemachine では多数の Virtual Camera を作成することができます。Virtural Camera は処理負荷を抑えた設計になっています。パフォーマンス重視のシーンの場合は、最良のパフォーマンスを確保するために、必要最低限の Virtural Camera 以外は常に全て無効化するようにしてください。
基本的には、1 つのショットにつき 1 つの Virtual Camera を使用するのが一般的です。本機能をうまく活用して、ドラマチックな、あるいはさりげない、カットやブレンドを作ってみてください。例えば以下が可能です。
2 体のキャラクターが会話をするカットシーンに 3 つの Virtual Camera を使用します。両方のキャラクターが入るミディアムショットが 1 つと、各キャラクターのクローズアップ用の Virtual Camera が 1 つずつ。そして Timeline を使用してオーディオを Virtual Camera に同期します。
既存の Virtual Camera の複製を作成し、両方の Virtual Camera をシーン内の同じ位置に配置します。2つ目の Virtual Camera は、FOV あるいは構図を変化させます。トリガーとなる領域にプレイヤーが入ると、1 つ目の Virtural Camera から 2 つ目の Virtural Camera へのブレンドが Cinemachine によって実行され、アクションの変化が強調されます。
どの時点においても、カメラを制御するのは、特定の 1 つの Virtual Camera で、これが ライブ の Virtual Camera です。唯一この原則が当てはまらないのは、特定の Virtural Camera から次の Virtural Camera へのブレンド中です。ブレンド中は両方の Virtual Camera がライブになります。
Cinemachine Brain
Cinemachine Brain は、Unity のカメラ自体に含まれるコンポーネントです。Cinemachine Brain はシーン内の全てのアクティブな Virtural Camera を監視しています。次のライブ Virtural Camera を指定するには、任意の Virtural Camera のゲームオブジェクトを アクティブあるいは非アクティブにして ください。すると、Cinemachine Brain が、最も最近アクティブにだった Virtural Camera を、ライブ Virtural Camera と同等かそれ以上の優先度で選択します。Cinemachine Brain が直前の Virtural Camera と新しい Virtural Camera との間でカットやブレンドを実行します。
ヒント: Cinemachine Brain を使用すると、動的なゲームイベントにリアルタイムでカメラを反応させることができます。優先度の操作を行うことによってカメラを制御するゲームロジックが可能になります。これは (アクションが常に予測可能とは限らない) ライブゲームに特に有用です。カットシーンなどのような予測可能な状況では Timeline を使用してカメラの動きを事前に設定してください。Timeline は Cinemachine Brain の優先度システムをオーバーライドするので、精密な、フレーム単位でのカメラ制御が可能です。
移動と照準
Virtural Camera の Body プロパティー で、シーン内における Virtural Camera の動き方を設定します。角度 (回転) は Aim プロパティー を使用して設定します。
各 Virtural Camera は、以下の 2 つのターゲットを持っています。
- Follow ターゲット ― Virtural Camera は、ここに指定されたゲームオブジェクトと一緒に移動します。
- Look At ターゲット ― Virtural Camera は、ここに指定されたゲームオブジェクトに照準を合わせます。
Cinemachine には、移動と照準を制御する多彩な手続き型アルゴリズムが含まれています。各アルゴリズムは、特定の問題を解決し、プロパティーによってニーズに応じたカスタマイズが可能になっています。Cinemachine はこれらのアルゴリズムを CinemachineComponent
オブジェクトとして実装します。カスタムの移動、照準動作を実装するには、CinemachineComponent
クラスを使用してください。
Body プロパティーは、シーン内における Virtural Camera の移動のための手続き型アルゴリズムとして、以下を提供しています。
- Transposer ― Follow ターゲットに対して一定の距離を維持しながら移動します。オプションで遅延 (Damping) も適用可能です。
- Do Nothing ― Virtural Camera は移動しません。
- Framing Transposer ― Follow ターゲットに対して一定の (スクリーンスペースにおける) 距離を維持しながら移動します。オプションで遅延 (Damping) も適用可能です。
- Orbital Transposer ― Follow ターゲットに対して可変の距離で移動します。オプションでプレイヤー入力を受け取る設定も可能です。
- Tracked Dolly ― 事前定義されたパスに沿って移動します。
- Hard Lock to Target ― Follow ターゲットと同じ位置を使用します。
Aim プロパティーは、Virtural Camera を Look At ターゲットに向けるための手続き型アルゴリズムとして以下を提供しています。
- Composer ― 構図の制約に従って、Look At ターゲットをカメラフレーム内に維持します。
- Group Composer ― 複数の Look At ターゲットをカメラフレーム内に維持します。
- Do Nothing ― Virtural Camera は回転しません。
- POV ― ユーザーの入力に応じて Virtural Camera を回転させます。
- Same As Follow Target ― カメラの角度を Follow ターゲットの角度と同じに設定します。
- Hard Look At ― Look At ターゲットをカメラフレームの中心に維持します。
ショットを構成する
Framing Transposer、Composer、Group Composer アルゴリズムは、ショットを構成する、カメラフレーム内の領域を以下のように定義します。
Dead zone ― Cinemachine はフレーム内のこの領域にターゲットを維持します。
Soft zone ― ターゲットがフレーム内のこの領域に入ると、カメラの角度が調整され、ターゲットを Dead zone 内に戻します。これは Damping に設定された時間に基づいて、ゆっくり行うことも素早く行うこともできます。
Screen ― Dead zone の中心の、画面における位置です。0.5 が画面の中心です。
Damping ― 実際のカメラマンが重い物理的なカメラを操作する際に発生するタイムラグをシミュレートします。Damping の値によって、カメラが追跡しているターゲットが Soft zone に入った時の、カメラの反応の素早さが決まります。小さい値を設定すればより反応の速いなカメラがシミュレートされ、ターゲットを Dead zone 内に維持しようとするカメラの移動や角度調整 (照準合わせ) が素早くなります。大きい値を設定すると、より重いカメラをシミュレートできます。値が大きいほど、ターゲットが Soft zone 内に入ることがより許容されます。
Game Window Guides が、これらの領域を分かりやすく表示するインタラクティブな視覚的インジケーターとして機能します。このガイドは ゲームビュー 上で、色の付いた領域として表示されます。
色の付いていない領域が Dead zone、青い領域が Soft zone です。Soft zone と Dead zone の位置は 画面上 の位置を示しています。赤い領域はターゲットが入ることの一切ない パスがない 領域です。黄色い正方形はターゲットを示しています。
これらの領域を調整することで、様々なカメラ動作が作り出せます。調整を行うには、ゲームビューで該当の領域の端をドラッグするか、インスペクターウィンドウでプロパティーを編集します。例えば、Damping の値を大きくすれば大きくて重いカメラをシミュレートできます。また Soft zone と Dead zone を大きくすれば、カメラフレームの中央に、ターゲットの動きに影響を受けない領域を作ることができます。この機能は、例えばアニメーションサイクルなど、ターゲットが若干動いただけの時に、カメラを追従させたくない場合などに役立ちます。
ノイズを使用してカメラの振動をシミュレートする
現実世界の物理的なカメラは往々にして重く扱いづらいものです。カメラマンの手持ちか、移動車両などの安定した物体に取り付けられる形で撮影されます。Noise プロパティー を使用すると、そうした現実世界のカメラのような効果をシミュレートしてシネマティックな表現を加えることができます。例えば、走るキャラクターの追跡時にカメラの振動を加えることで、プレイヤーのアクションへの没入感を高めることも可能です。
フレームの更新の度に、Cinemachine はターゲットを追うカメラの動きとは別にノイズを追加します。ノイズは未来のフレームのカメラの位置に影響を及ぼしません。この独立性によって、Damping などのプロパティーに予測通りの動作が保証されます。