(改良)DOTWEEN ► Tween startup failed (NULL target/property – ): the tween will now be killed

前回の記事。

確かに前回の記事通りでも可能なのですが、

DOTWEEN を使えば使うほど、その数だけ Kill 管理をしなければならない…!

嫌になってきたので、DOTWEEN自体になにか方法がないか探したところ、ありました☺

Tween     tw;

void OnDestroy()
{
    // Destroy 前に Tween を Kill
    if (tw != null)
    {
        tw.Kill(false);
        tw = null;
    }
}

public void ExecAnimation()
{
    // ExecAnimation が複数回呼ばれると前の Tween を追えなくなるので、ここで一旦 Kill
    if (tw != null)
    {
        tw.Kill(false);
        tw = null;
    }
    tw = DOTween.To(
        () => gameObject.transform.position,
        v => { transform.position = v; },
        new Vector3(0, 0, 1),
        0.5f
    )
    .SetRelative()
    .SetEase(Ease.OutCubic)
    .OnComplete( () => tw = null );
}

public void ExecAnimation()
{
    DOTween.To(
        () => gameObject.transform.position,
        v => { transform.position = v; },
        new Vector3(0, 0, 1),
        0.5f
    )
    .SetRelative()
    .SetEase(Ease.OutCubic)
    .SetLink(gameObject);
}

SetLink で指定した gameObject とライフタイムを共にするようになり、gameObject が Destroy されると同時に、Tween も解放されるようになります。便利。

public void ExecAnimation()
{
     transform.DOScaleX(0f, 1f).SetLink(gameObject);
}

よく使われるこんな形でも、最後に SetLink を足してあげます。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA