こんにちわ、DOTween大好きオオバです。

DOTweenをasync/awaitで実装する とき、
「UniTask一択」です。

わざわざC#デフォルトのTaskを使う必要はありません。

これらがUniTaskを使う理由です。

本記事では具体的にDOTweenを
async/await化する上でのポイントを
解説していきます。

DOTweenをasync/awaitする方法はawaitするだけ

【UniTask】DOTweenをasync/await化する方法(キャンセル対応込み)_0

結論 Tweenをawaitするだけ です。
これで DOTweenをasync/await化 できます。

UniTaskがDOTweenをサポートしているためですね。
ありがたいです。

async UniTask StartTween()  
{
    await transform.DOLocalMove(Vector3.one, 1f);  
}

この通り超簡単ですよね。
ここから大事な キャンセル処理 の解説に入ります。

この記事の内容

キャンセル可能なasync/awaitのDOTweenの作り方

【UniTask】DOTweenをasync/await化する方法(キャンセル対応込み)_1

ToUniTaskメソッドCancellationTokenを渡します。

手順はコチラ
  1. CancellationTokenSource作成
  2. CancellationTokenを取得
  3. ToUniTaskでTweenにTokenを渡す

具体的なソースコードを見ていきましょう。

void Start()  
{
    // 1. CancellationTokenSource作成  
    var cts = new CancellationToken();  

    // 2. CancellationTokenを取得  
    var token = cts.Token;  

    transform.DOLocalMove(Vector3.one, 1f)  
        // 3. ToUniTaskでTweenにTokenを渡す  
        .ToUniTask(cancellationToken: token);  

    // キャンセル実行  
    cts.Cancel();  
}

CancellataionTokenSource
Cancelメソッドを呼び出すことで
Sourceから作られたTokenはキャンセルされます。

つまりDOTweenも停止します。

キャンセルしないTween

【UniTask】DOTweenをasync/await化する方法(キャンセル対応込み)_2

キャンセルしたTween

【UniTask】DOTweenをasync/await化する方法(キャンセル対応込み)_3

UniTaskはDOTweenのキャンセル挙動も設定可

【UniTask】DOTweenをasync/await化する方法(キャンセル対応込み)_4

といった、DOTweenを途中で停止(キャンセル)させたとき
数パターン分岐します。

UniTaskはそのあたりもサポート済みです。さすが。

先のサンプルコードに
OnComplete処理を追加してみます。

Tween終了時に非アクティブ
void Start()  
{
    // 1. CancellationTokenSource作成  
    var cts = new CancellationToken();  

    // 2. CancellationTokenを取得  
    var token = cts.Token;  

    transform.DOLocalMove(Vector3.one, 1f)  
        // 【追加処理】Tween完了時にGameObjectを非アクティブ  
        .OnComplete(()=>gameObject.SetActive(false))  
        // 3. ToUniTaskでTweenにTokenを渡す  
        .ToUniTask(cancellationToken: token);  

    // キャンセル実行  
    cts.Cancel();  
}
キャンセルしないTween

キャンセルしないTween

キャンセルしたTween。OnCompleteが呼ばれていない

キャンセルしたTween

TweenCancelBehaviour.Killを指定すると
キャンセル時にOnCompleteは呼ばれません。

.ToUniTask(TweenCancelBehaviour.Complete, token);  

TweenCancelBehaviour.Completeを設定すると、
OnCompleteも呼ばれるようになります。

各TweenCancelBehaviourの解説

【UniTask】DOTweenをasync/await化する方法(キャンセル対応込み)_5

DOTweenのキャンセル挙動を
TweenCancelBehaviourで指定します。

いくつか種類があるため、
よく使うものを紹介します。

Kill(デフォルト)

Killまたは未指定の場合、
キャンセル時にOnKillだけ呼ばれます。
OnCompleteは呼ばれないので注意です。

内部処理はtween.Kill(false)

Complete

Completeを指定すると
キャンセル時にOnComplete → OnKill
の順に呼ばれます。

内部処理はtween.Kill(true)

CompleteWithSeqeunceCallback

CompleteWithSeqeunceCallbackを指定すると
キャンセル時にOnStepComplete → OnComplete → OnKill
の順に呼ばれます。

内部処理はtween.Complete(true)

詳しいDOTweenのコールバック順について
コチラの記事にまとめています。
よろしければどうぞ。

まとめ: DOTweenのasync/await化

【UniTask】DOTweenをasync/await化する方法(キャンセル対応込み)_6

DOTweenをasync/await化する方法を紹介しました。

記事内容を簡単にまとめます。

こんな感じです。

UniTaskを使うことで簡単に
DOTweenをasync/await化することができました。

最近はコルーチンを使うプロジェクトも
減ってきました。

これから新規で作るプロジェクトは
async/await一択でしょう。

その際はUniTaskは必須。
同時にDOTweenもasync/await化も必要です。

本記事を通してDOTweenをasync/awaitで使う方法
思い出していただければと。


フォローすると UIデザイナー力の上がるTwitter やってます!
今日から使えるテクニックを発信中。
ぜひフォローしてみてください!
👉フォローはこちら!

最後まで読んでいただきありがとうございました!
すばらしいDOTweenライフをお過ごしください。

オススメ記事
検証環境
参考サイト