【Unity】DoTweenアニメーションをTimeLine上でPreviewする

DEVELOP, Unity

ITimeControlを使ってDoTweenの動作をPreview出来る様にする。 Control Trackとして登録する。

確認バージョン

2018.4.0f1

※参考:停止中でもTimelineでDOTweenを再生させる – Unityの備忘録的な

using UnityEngine;
using UnityEngine.Timeline;
using DG.Tweening;
/// <summary>
/// TimeLineを使った演出用基底クラス。
/// </summary>
public class BaseTimeControl : MonoBehaviour, ITimeControl
{
    public Sequence m_Sequence = null;
	
    /// <summary>
    /// クリップ侵入時に呼ばれる
    /// </summary>
	public void OnControlTimeStart ()
	{
	}
    /// <summary>
    /// クリップ退出時
    /// </summary>
	public void OnControlTimeStop ()
	{
	}
    /// <summary>
    /// 変更通知が来た際に、呼ばれます。
    /// Script更新時にも呼ばれます。
    /// </summary>
    void OnValidate()
    {
        SetupAction();
    }
    /// <summary>
    /// 何度も呼ばれる
    /// </summary>
	public void SetTime (double _time)
	{
        if(m_Sequence == null)
        {
            return;
        }
        m_Sequence.Goto((float)_time);
	}
    /// <summary>
    /// シーケンスの初期化。
    /// </summary>
    protected void InitSequence()
    {
        if(m_Sequence != null)
        {
            m_Sequence.Goto(0);
            m_Sequence.Kill();
        }
        m_Sequence = DOTween.Sequence();
    }
    /// <summary>
    /// 動作を記述してください。
    /// </summary>
    protected virtual void SetupAction()
    {
    }
}
using UnityEngine;
using UnityEngine.Timeline;
using DG.Tweening;
/// <summary>
/// TimeLineを使った演出用基底クラス。
/// </summary>
public class SampleTimeControl : BaseTimeControl
{
    /// <summary>
    /// パラメータ。
    /// </summary>
    public Vector3                      ToMovePosision;
    [Range(0.1f, 10.0f)]
    public float                        ToMoveDuration = 1.0f;
    public DG.Tweening.Ease             EasingType = Ease.Linear;
    /// <summary>
    /// 演出。
    /// </summary>
    protected override void SetupAction()
    {
        InitSequence();
        Sequence seq = m_Sequence;
        seq.Append(transform.DOLocalMove(ToMovePosision, ToMoveDuration).SetEase(EasingType));
    }
}

プレビューの逆再生も問題なく出来る。

何を行っているのか?

DG.Tweening.SequenceにはGotoという関数があって、時間を指定するとその再生位置までジャンプします。タイムラインから得られる再生位置は0~1.0の範囲であり、DG.Tweening.SequenceのGotoで設定するアニメーションの再生位置も0~1.0で指定できることから、同期を取る様にしています。

Posted by kazupon