テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】敵とプレイヤーが常に映るようにするカメラワーク

今回は敵とプレイヤーが常にカメラに映るようにするカメラワークについてです。

 

 

ターゲットが全て映るようなカメラワーク

f:id:tsubaki_t1:20180411220133j:plain

最近のTPSゲームで大体実装されてるカメラワークの一つに、「複数のターゲットが常に映るように、カメラの位置を調整する」というものがあります。

スマブラアクションRPGのボス戦等で良く見ることの出来るこのカメラワークは、敵とプレイヤーの相対位置を把握しやすくして、ゲームの手触り感をとても良くします。

 

例えば下の画面はマリオオデッセイのボス戦の一つですが、マリオとボスの距離があっても、両方共カメラに映るようにカメラの位置が変化しています。

f:id:tsubaki_t1:20180411222107j:plain

f:id:tsubaki_t1:20180411222037p:plain

マリオオデッセイ 砂の国 ボス ハリエット 攻略 [MarioOddysey] - YouTube

 

CinemachineのGroup機能

今回はこの動きを、CinemachineのGroup機能で実現してみます。

このカメラリグを使用すると、複数のキャラクターが常に映るようにカメラの位置の調整やズームをしてくれます。

f:id:tsubaki_t1:20180411223336g:plain

また少し設定が異なりますが、2Dにも対応しています。

f:id:tsubaki_t1:20180411231905g:plain

使い方

Cinemachineが導入されているのが前提条件です。


まずCinemachineのメニューアイテムからCreate Target Group Cameraを選択します。これでHierachyにCM vcam1とTargetGroup1が追加されます。

f:id:tsubaki_t1:20180411223957j:plain

f:id:tsubaki_t1:20180411224251j:plain


追跡対象の登録

Target Group 1側を設定します。
Targetの要素を+ボタンで増やして、そこにカメラが追跡したいターゲットを登録します。その際にRadiusに対象の大きさを設定しておくと、見きれるぐらい画面端にキャラクターが移動するのを防げます。

f:id:tsubaki_t1:20180411224729g:plain

f:id:tsubaki_t1:20180411224844j:plain


カメラの動きの細かい指定(3D)

後はカメラの動きの細かい部分を指定します。こちらはVirtual Camera(CM vcam1)側の設定を行います。

この辺りは3Dと2Dで少し設定が異なっていて、3Dで使用する場合、少なくともLook AtにTargetGroupが登録されていること、そしてAimにGroup Composerが登録されていることが前提条件です。
Create Target Group Cameraで作ったVirtual Cameraには、その辺りが自動的に登録されています。

f:id:tsubaki_t1:20180411225234j:plain

 こちらの機能はターゲットをカメラに収める手法としてドリー(カメラ自体を動かす)かズーム(画角を動かす)か、両方かを選べるようになっています。

ズームだとカメラの位置自体は動かさないのですが、ドリーだとカメラの位置もある程度動いてしまう点に注意が必要です。

f:id:tsubaki_t1:20180411230905j:plain

個人的にはアクションゲームに使用する場合には、ドリーカメラの方が距離感が維持しやすくて良い印象です。

なお3Dカメラの場合はCinemachine Colliderとの連携が良い感じに動きます。例えば屋内のような「世界の裏側が見えやすい」ステージでも、コライダーを確認してカメラの位置を調整してくれます。
これを使う場合はズームも合わせて使うと良さそうです。

f:id:tsubaki_t1:20180411233759j:plain

 

カメラの動きの細かい指定(2D)

2Dもしくは2.5Dで動かしたい場合にはVirtual Cameraの設定が少し異なります。

必要なのはFollowにTarget Group1が設定されていること、そしてBodyにFraming Transposerが設定されていることです。

f:id:tsubaki_t1:20180411231959j:plain

ちなみに2DカメラのGroupはConfinerとの連携が直感的です(というか3D Confinerが直感的ではないが正しい)。Target Groupを使用してる状態でも、下のように画面の範囲指定が出来ています。

f:id:tsubaki_t1:20180411232835g:plain

 

関連

カメラが壁を貫通して世界の裏側を見せるのを防ぐカメラワーク

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

通常はフリールックカメラ、戦闘時はグループカメラ等を切り替える

tsubakit1.hateblo.jp
その他カメラ

tsubakit1.hateblo.jp