CinemachineのFraming Transposerを使って2Dゲーム用のカメラを作る方法をまとめました。
- はじめに
- Window Guideを表示・非表示にする
- 初期設定のまま再生してみる
- Screen XとScreen Yで対象の位置を決める
- Soft Zoneを設定してカメラをピッタリ追従させる
- Dead Zoneを設定して一定範囲内はカメラを追従させないようにする
- 対象がこれから動く位置を予測してカメラを動かすLookahead
- 関連
- 参考
Unity2018.4.0
Cinemachine2.2.9
はじめに
この記事では、CinemachineのVirtual CameraのBodyをFraming Transposerに設定した時の挙動について説明します。
まずテスト用に次のように鳥が飛んでいくだけの2Dのシーンを作っておきます。
そしてVirtual CameraのFollowにはこの鳥のオブジェクトを設定します。
なお、Cinemachineの基本的な使い方やVirtual Cameraの設定方法は本記事では説明しません。
これらは以下の記事にまとめていますので、必要に応じて参照してください。
Window Guideを表示・非表示にする
Framing Transposerでは、「対象を画面のこの位置に映す」とか「画面のここまでは対象がはみ出さないようにする」といったように、スクリーン座標ベースの設定値を使用します。
設定を行う際にはVirtual CameraのGame Window GuidesをONにしてこれらの設定値を可視化しておきます。
初期設定のまま再生してみる
それではこれからいろいろ設定してみますが、まずは初期設定のまま再生してみます。
Follow対象の少しあとからカメラが付いていくようなカメラが作れました。
Screen XとScreen Yで対象の位置を決める
前節の状態ではスクリーンの中心に対象を映しています。
たとえばスクリーン左下寄りに映したいときには、Screen XやScreen Yの値を設定します。
Soft Zoneを設定してカメラをピッタリ追従させる
これまでの状態ではカメラは対象に少し遅れて追従していきます。
対象にピッタリと追従させるには、Soft Zoneを設定します。
Soft Zoneとはガイドでいうところの赤い部分のことで、このゾーンには対象が絶対に入らないようにカメラが動きます。
つまり、このゾーンに対象が入ったらすぐにカメラが適切な位置まで移動します。
対象にカメラをピッタリと追従させるには、Soft Zone WidthとSoft Zone Heightをゼロにします。
これでカメラがピッタリ追従するようになりました。
Dead Zoneを設定して一定範囲内はカメラを追従させないようにする
次に、対象が上下移動したときにはカメラが追従しないように設定してみます。
まず今回はSoft Zoneは使わないのでUnlimited Soft Zoneにチェックを入れておきます。
そしてDead Zoneを調整します。
DeadZoneとはガイドでいうところの青い部分のことで、このゾーンに対象が入ったらカメラが移動をはじめます。
つまり、「このゾーンには対象が入ってもいいけど、入ったら徐々にこのゾーンから出る方向にカメラが動くよ」という領域です。
今回は上下の一定範囲内であればカメラを移動させないように設定したいので、Dead Zone Heightを0.5に設定します。
これで、上下一定範囲内はカメラが追従しないようになりました。
対象がこれから動く位置を予測してカメラを動かすLookahead
さて最後にLookaheadについて軽く触れます。
Lookahead Timeを設定すると、対象の動きから設定した時間後の対象の位置を予測して、それを基にカメラの位置を計算します。
あくまで未来のことを予測しているため、対象が不規則に動き回るような動きをする場合にはカメラもきれいに動きません。
さてじゃあこれをいつ使うのか?という点が自分自身よくわからなかったのですが、
テラシュールブログさんで紹介されているような使い方が正しそうです。
玉転がしは移動先を見るゲームです。移動先に視点を先読みして視界を確保するのがゲームのストレスを軽減するオプションになりそうです。
たしかに自分で対象を操作するゲームの場合は少し先が見えていたほうが操作しやすそうです。