以下の内容はhttps://indie-du.com/entry/2019/06/12/114313より取得しました。


Unity : カメラをベジェ曲線にそって動かす

カメラをキャラのまわりにそってグイグイ動かしたかったのですが、Unityのアニメーション機能およびTimelineを使うとガクガクになってしまうので良い方法を探していました。 「ベジェ曲線で動かす方法ないかなあ」と思っていたら Cinemachine にそのものズバリな機能があったので喜んで導入した軌跡。

f:id:sugar_affordance:20190612112258g:plain

もうちょっとブンまわしてもよかったかも...

Cinemachine を導入

PackageManagerに入っているので導入しましょう。パケマネパケマネ。

f:id:sugar_affordance:20190612113148p:plain

VirtualCameraとDollyTrackを作成

映画とかでカメラマンを動かす台車のことを ドリー というらしいですね...

カメラドリー - Wikipedia

Cinemachine でもDollyという呼び方でパスを作成します。
メニューの Cinemachine から Create Dolly Camera with Track を選択。

f:id:sugar_affordance:20190612113203p:plain

Virtual Camera が一つと、Cinemachine Smooth Path が一つ作成されます。

パスを作成

Cinemachine Smooth Path のほうに Waypoint を追加していくと、デフォルトでベジェ曲線のレールがしかれていきます。

f:id:sugar_affordance:20190612113305p:plain

カメラの 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

Class CinemachineVirtualCamera | Package Manager UI website

Class CinemachineTrackedDolly | Package Manager UI website




以上の内容はhttps://indie-du.com/entry/2019/06/12/114313より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14