今回は敵とプレイヤーが常にカメラに映るようにするカメラワークについてです。
ターゲットが全て映るようなカメラワーク
最近のTPSゲームで大体実装されてるカメラワークの一つに、「複数のターゲットが常に映るように、カメラの位置を調整する」というものがあります。
スマブラやアクションRPGのボス戦等で良く見ることの出来るこのカメラワークは、敵とプレイヤーの相対位置を把握しやすくして、ゲームの手触り感をとても良くします。
例えば下の画面はマリオオデッセイのボス戦の一つですが、マリオとボスの距離があっても、両方共カメラに映るようにカメラの位置が変化しています。
マリオオデッセイ 砂の国 ボス ハリエット 攻略 [MarioOddysey] - YouTube
CinemachineのGroup機能
今回はこの動きを、CinemachineのGroup機能で実現してみます。
このカメラリグを使用すると、複数のキャラクターが常に映るようにカメラの位置の調整やズームをしてくれます。
また少し設定が異なりますが、2Dにも対応しています。
使い方
Cinemachineが導入されているのが前提条件です。
まずCinemachineのメニューアイテムからCreate Target Group Cameraを選択します。これでHierachyにCM vcam1とTargetGroup1が追加されます。
追跡対象の登録
Target Group 1側を設定します。
Targetの要素を+ボタンで増やして、そこにカメラが追跡したいターゲットを登録します。その際にRadiusに対象の大きさを設定しておくと、見きれるぐらい画面端にキャラクターが移動するのを防げます。
カメラの動きの細かい指定(3D)
後はカメラの動きの細かい部分を指定します。こちらはVirtual Camera(CM vcam1)側の設定を行います。
この辺りは3Dと2Dで少し設定が異なっていて、3Dで使用する場合、少なくともLook AtにTargetGroupが登録されていること、そしてAimにGroup Composerが登録されていることが前提条件です。
Create Target Group Cameraで作ったVirtual Cameraには、その辺りが自動的に登録されています。
こちらの機能はターゲットをカメラに収める手法としてドリー(カメラ自体を動かす)かズーム(画角を動かす)か、両方かを選べるようになっています。
ズームだとカメラの位置自体は動かさないのですが、ドリーだとカメラの位置もある程度動いてしまう点に注意が必要です。
個人的にはアクションゲームに使用する場合には、ドリーカメラの方が距離感が維持しやすくて良い印象です。
なお3Dカメラの場合はCinemachine Colliderとの連携が良い感じに動きます。例えば屋内のような「世界の裏側が見えやすい」ステージでも、コライダーを確認してカメラの位置を調整してくれます。
これを使う場合はズームも合わせて使うと良さそうです。
カメラの動きの細かい指定(2D)
2Dもしくは2.5Dで動かしたい場合にはVirtual Cameraの設定が少し異なります。
必要なのはFollowにTarget Group1が設定されていること、そしてBodyにFraming Transposerが設定されていることです。
ちなみに2DカメラのGroupはConfinerとの連携が直感的です(というか3D Confinerが直感的ではないが正しい)。Target Groupを使用してる状態でも、下のように画面の範囲指定が出来ています。
関連
カメラが壁を貫通して世界の裏側を見せるのを防ぐカメラワーク
通常はフリールックカメラ、戦闘時はグループカメラ等を切り替える
tsubakit1.hateblo.jp
その他カメラ