CinemachineのVirtual CameraのTracked Dollyの使い方をまとめました。
- はじめに
- Cinemachine Pathでパスを引く
- Cinemachine Smooth Pathを使えば簡単にパスが引ける
- Virtual Cameraにパスをセットする
- スクリプトからPositionをセットする
- 自動的にパス上を移動してくれるAuto Dolly
- 関連
- 参考
Unity2018.4.0
Cinemachine2.2.9
はじめに
この記事では、CinemachineのVirtual CameraのBodyをTracked Dollyに設定した時のモードについて説明します。
最終的にパス上をカメラが動くようなカメラワークを作ります。
また説明の便宜上、AimはComposerにして常にキャラの方向を向かせておきます。
なお、Cinemachineの基本的な使い方やVirtual Cameraの設定方法は本記事では説明しません。
これらは以下の記事にまとめていますので、必要に応じて参照してください。
Cinemachine Pathでパスを引く
さてパス上にカメラを配置するには何はともあれまずはパスを作らなければなりません。
パスを引くには空のGameObjectにCinemachine Pathコンポーネントをアタッチします。
このコンポーネントはベジェ曲線でパスを引くことができます。
Add a waypoint to the pathをクリックしてWaypointを追加していきます。
アンカーポイントとハンドルで曲線を作っていく、まあ普通のベジェ曲線です。
Cinemachine Smooth Pathを使えば簡単にパスが引ける
前節のパスの引き方は細かい調整が効きますが、めんどくさいです。
そこで代わりにCinemachine Smooth Pathというコンポーネントを使うと、
Waypointを作っていくだけで間をいい感じに補間してくれます。
これ、実際使ってみるとなかなか感動します。便利。
Virtual Cameraにパスをセットする
さてパスを作ったらあとはVirtual Cameraにそれをセットするだけです。
BodyをTracked DollyにしてPathに先ほどのパスをセットします。
あとはPath Positionの値をいじればカメラがパス上を移動します。
このとき、Path Positionの単位をPosition Unitsで設定できます。
これにより例えば「Position = 1と入力した時、その1という値が何を指すか」ということを決められます。
それぞれの説明は下記の通りです。
名前 | 説明 |
---|---|
Path Units | アンカーポイントを単位の基準とする 最初のアンカーポイントを0、2個目のアンカーポイントを1とする。以降同様 |
Distance | 距離を単位の基準とする |
Normalized | パスの最初を0、最後を1とする |
スクリプトからPositionをセットする
スクリプトからパスのPositionを動かすにはちょっと変わった方法を使います。
using Cinemachine; using UnityEngine; public class Example : MonoBehaviour { [SerializeField] private CinemachineVirtualCamera _virtualCamera; [SerializeField] private float _position; private CinemachineTrackedDolly _dolly; void Start() { // Virtual Cameraに対してGetCinemachineComponentでCinemachineTrackedDollyを取得する // GetComponentではなくGetCinemachineComponentなので注意 _dolly = _virtualCamera.GetCinemachineComponent<CinemachineTrackedDolly>(); } void Update() { // パスの位置を更新する // 代入して良いのか不安になる変数名だけどこれでOK _dolly.m_PathPosition = _position; } }
ポイントはいくつかありますが、ソースコードのコメントに記載しました。
自動的にパス上を移動してくれるAuto Dolly
Tracked Dollyにはもう一つ、Auto Dollyという機能があります。
これにチェックを入れると、対象との位置関係を計算してパス上をカメラが自動的に移動してくれます。
動作はこんな感じです。