【Unity】【Cinemachine】Framing Transposerを使って2Dゲーム用のカメラを作る

CinemachineのFraming Transposerを使って2Dゲーム用のカメラを作る方法をまとめました。

Unity2018.4.0
Cinemachine2.2.9

はじめに

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

f:id:halya_11:20190629152417p:plain

まずテスト用に次のように鳥が飛んでいくだけの2Dのシーンを作っておきます。

f:id:halya_11:20190629152921g:plain

そしてVirtual CameraのFollowにはこの鳥のオブジェクトを設定します。
またFraming TransposerはLook AtをNoneにしておく必要があるので、Noneになっていることを確認します。

f:id:halya_11:20190629152558p:plain

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

light11.hatenadiary.com

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

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

f:id:halya_11:20190629154356p:plain

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

それではこれからいろいろ設定してみますが、まずは初期設定のまま再生してみます。

f:id:halya_11:20190629153417g:plain

Follow対象の少しあとからカメラが付いていくようなカメラが作れました。

Screen XとScreen Yで対象の位置を決める

前節の状態ではスクリーンの中心に対象を映しています。
たとえばスクリーン左下寄りに映したいときには、Screen XやScreen Yの値を設定します。

f:id:halya_11:20190629160226p:plain

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

これまでの状態ではカメラは対象に少し遅れて追従していきます。
対象にピッタリと追従させるには、Soft Zoneを設定します。

Soft Zoneとはガイドでいうところの赤い部分のことで、このゾーンには対象が絶対に入らないようにカメラが動きます。
つまり、このゾーンに対象が入ったらすぐにカメラが適切な位置まで移動します。

f:id:halya_11:20190629154625p:plain

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

f:id:halya_11:20190629154902p:plain

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

f:id:halya_11:20190629155041g:plain

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

次に、対象が上下移動したときにはカメラが追従しないように設定してみます。
まず今回はSoft Zoneは使わないのでUnlimited Soft Zoneにチェックを入れておきます。

f:id:halya_11:20190629155333p:plain

そしてDead Zoneを調整します。
DeadZoneとはガイドでいうところの青い部分のことで、このゾーンに対象が入ったらカメラが移動をはじめます。
つまり、「このゾーンには対象が入ってもいいけど、入ったら徐々にこのゾーンから出る方向にカメラが動くよ」という領域です。

f:id:halya_11:20190629155549p:plain

今回は上下の一定範囲内であればカメラを移動させないように設定したいので、Dead Zone Heightを0.5に設定します。

f:id:halya_11:20190629155659p:plain

これで、上下一定範囲内はカメラが追従しないようになりました。

f:id:halya_11:20190629155904g:plain

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

さて最後にLookaheadについて軽く触れます。

Lookahead Timeを設定すると、対象の動きから設定した時間後の対象の位置を予測して、それを基にカメラの位置を計算します。
あくまで未来のことを予測しているため、対象が不規則に動き回るような動きをする場合にはカメラもきれいに動きません。

f:id:halya_11:20190629160625p:plain

さてじゃあこれをいつ使うのか?という点が自分自身よくわからなかったのですが、
テラシュールブログさんで紹介されているような使い方が正しそうです。

tsubakit1.hateblo.jp

玉転がしは移動先を見るゲームです。移動先に視点を先読みして視界を確保するのがゲームのストレスを軽減するオプションになりそうです。

たしかに自分で対象を操作するゲームの場合は少し先が見えていたほうが操作しやすそうです。

関連

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

参考

docs.unity3d.com