【Unity】【Cinemachine】Composerを使って対象を見続けるカメラを作る

CinemachineのAimをComposerに設定して対象を見続けるカメラを作る方法をまとめます。

Unity2018.4.0
Cinemachine2.2.9

2019/11/26 追記

誤りをご指摘いただいたのでSoft ZoneとDead Zoneの説明を修正いたしました。
ご指摘いただきありがとうございます。

はじめに

この記事では、CinemachineのVirtual CameraのAimをComposerに設定した時の挙動について説明します。

f:id:halya_11:20190629231607p:plain

Virtual CameraのLook Atには注視する対象をアサインします。
説明の便宜上、Followには何もアサインしない状態にしておきます。

f:id:halya_11:20190629232741p:plain

またFollowに何も設定しないとカメラの位置は変化しないため、
対象が良い感じに見える位置にVirtual Cameraの位置を設定しておきます。

なお、Cinemachineの基本的な使い方やVirtual Cameraの設定方法は本記事では説明しません。
これらは以下の記事にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

Window Guideを表示・非表示にする

Composerでは、「対象を画面のこの位置に映す」とか「画面のここまでは対象がはみ出さないようにする」といったように、スクリーン座標ベースの設定値を使用します。
設定を行う際にはVirtual CameraのGame Window GuidesをONにしてこれらの設定値を可視化しておきます。

f:id:halya_11:20190629234028p:plain

初期設定のまま再生してみる

さてこれからいろいろ設定値を変えてみますが、まずは初期設定のまま再生してみます。

f:id:halya_11:20190629234203g:plain

カメラが回転して対象を追っていることが確認できました。

Tracked Object Offsetで対象の中心位置を調整する

前節の設定ではカメラの注視点がキャラクターの足になってしまっています。

f:id:halya_11:20190629235002p:plain

これを補正するには、Tracked Object OffsetのYの値を調整します。

f:id:halya_11:20190629235027p:plain

これによりカメラがキャラクターの顔あたりを注視するようになりました。

f:id:halya_11:20190629235223g:plain

Soft Zoneを設定してカメラをピッタリ追従させる

さてこれまでの設定ではカメラは対象に少し遅れて追従していきます。

f:id:halya_11:20190629235801g:plain

対象にピッタリと追従させるには、Soft Zoneを設定します。
Soft Zoneとはガイドでいうところの青い部分のことで、このゾーンに対象が入ると対象が後述のDead Zoneに入るようにカメラが動きます。

対象にカメラをピッタリと追従させるには、Soft Zone WidthとSoft Zone Heightをゼロにします。

f:id:halya_11:20190629235958p:plain

これでカメラがピッタリ追従するようになりました。

f:id:halya_11:20190630000144g:plain

Dead Zoneを設定して一定範囲内はカメラを追従させないようにする

次に、対象が画面の一定範囲内から出るまではカメラを追従させない設定にしてみます。
Dead Zoneとはガイドでいうところの青い部分に囲まれた透明な範囲のことで、
対象がこのゾーン内に収まっているうちはカメラは動きません。

Soft Zone WidthとHeightは0.8に、Dead Zoneはそれぞれ0.5に設定します。

f:id:halya_11:20190630000911p:plain

これによりDead Zoneの範囲ではカメラが対象を追従しないようになりました。

f:id:halya_11:20190630001053g:plain

Dead ZoneやSoft Zoneの中心位置を変える

Screen XやScreen YをいじるとDead ZoneやSoft Zoneの中心位置が変わります。
また対象がDead Zoneの中心に来るようにカメラも回転します。

f:id:halya_11:20190630001801g:plain

Soft Zoneの位置だけを変えるにはBias XやBias Yといったパラメータを編集します。

f:id:halya_11:20190630002037g:plain

対象がこれから動く位置を予測してカメラを動かすLookahead

Lookaheadとは「予測」のことです。 Lookahead Timeを設定すると、対象の動きを基に、設定した時間後の対象の位置を予測して、それを基にカメラの位置を計算します。

自分で操作を行うゲームの場合は少し先の状況が見えていたほうが操作性が良いので、そのような場合に使うようです。

tsubakit1.hateblo.jp

ただしあくまで未来のことを予測しているため、対象が不規則に動き回るような動きをする場合にはカメラもきれいに動きません。

参考

docs.unity3d.com