DoTweenのOnComplete()が呼ばれなくて困った話

久しぶりにDoTweenを使っていてしょうもないことでハマったので、反省の意味を込めてメモしておきます。 アニメーションが再生中であるかどうかを判定するために、再生中のSequenceをメンバー変数に持たせればいいかと思い以下のように書いていました。

using Assets.Scripts.SGUI.SGameObjects.ComponentScripts;
using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class App : MonoBehaviour
{
    [SerializeField]
    private GameObject obj;

    [SerializeField]
    private Button button;

    public Sequence sequence;

    void Start()
    {
        sequence = DOTween.Sequence();
        button.onClick.AddListener(() =>
        {
            Animate();
        });
    }

    public void Animate()
    {
        Debug.Log("STARTED");
        if (sequence.IsPlaying()) { sequence.Complete(); }
        else sequence.Append(obj.transform.DOShakePosition(10f, 100, 100))
            .OnComplete(() =>
            {
                Debug.Log("COMPLETED");
            });
    }
}

が、これはうまくいきません。sequence.IsPlaying() は呼ばれないし OnComplete() も呼ばれません。 理由は単純に自分が勘違いしてただけなのですが、Sequenceはインスタンスを生成して使いまわすものではなく、アニメーションを再生するたびに DOTween.Sequence()で生成するものだからみたいです。なので正しくはこうです。

    public void Animate()
    {
        Debug.Log("STARTED");
        if (sequence.IsPlaying()) { sequence.Complete(); }
        else sequence = DOTween.Sequence().Append(obj.transform.DOShakePosition(10f, 100, 100))
            .OnComplete(() =>
            {
                Debug.Log("COMPLETED");
            });
    }

Append()の意味を考えると当然なのですが、なまじOnComplete以外のアニメーションは動くのでしばらくハマりました‥‥
一度ちゃんとドキュメント読んでおこうと思いました。