カメラをキャラのまわりにそってグイグイ動かしたかったのですが、Unityのアニメーション機能およびTimelineを使うとガクガクになってしまうので良い方法を探していました。 「ベジェ曲線で動かす方法ないかなあ」と思っていたら Cinemachine にそのものズバリな機能があったので喜んで導入した軌跡。
もうちょっとブンまわしてもよかったかも...
Cinemachine を導入
PackageManagerに入っているので導入しましょう。パケマネパケマネ。
VirtualCameraとDollyTrackを作成
映画とかでカメラマンを動かす台車のことを ドリー というらしいですね...
Cinemachine でもDollyという呼び方でパスを作成します。
メニューの Cinemachine から Create Dolly Camera with Track を選択。
Virtual Camera が一つと、Cinemachine Smooth Path が一つ作成されます。
パスを作成
Cinemachine Smooth Path のほうに Waypoint を追加していくと、デフォルトでベジェ曲線のレールがしかれていきます。
カメラの LookAt 位置を決める
Virtual Camera の LookAt を設定しないと、カメラがレールに対してまっすぐの方向を向きます。
今回は適当なGameObjectを作成して、Timelineで動かしました。
スクリプトでドリーの位置を設定する
使用したスクリプト
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Timeline; using Cinemachine; public class Timeline_DiskIntroductionCameraDolly : MonoBehaviour, ITimeControl { [SerializeField] CinemachineVirtualCamera cvc; CinemachineTrackedDolly dolly; void Awake() { dolly = cvc.GetCinemachineComponent<CinemachineTrackedDolly>(); } public void OnControlTimeStart() { } public void SetTime(double time) { dolly.m_PathPosition = (float)time /1f; } public void OnControlTimeStop() { } }
タイムラインのアニメーショントラックにしました。
VirtualCamera にはDollyのプロパティを持っていないので、GetCinemachineComponent でコンポーネントを取得します。
ベジェ曲線は自然な動きっぽくなっていいですね
・Cinemachine クラスAPI