UnityでDoTweenの終了をUniTaskで待ち受ける

UniTaskでDoTweenを待ち受けできるようにするには、下準備が必要なことは、いろいろなサイトや書籍でも書かれていたので知っていたが、逆に、下準備をしなくても待ち受けができるような感じがしたので、メモとして残しておきたいと思います。 具体的には、以下のように各DoTweenの最後に
.AsyncWaitForCompletion()
を入れてあげれば、各DoTweenの終了後に以下の処理へ進むような挙動を作ることができるようです。 このやり方をすれば、下準備が必要なくなりますが、逆に「.AsyncWaitForCompletion()」を毎回つける必要があるので、ちょっと可読性が悪くなるような気はします。 以下は、上下左右に移動させるDoTweenの実装例です。
    void Start()
    {
        MoveAsync().Forget();
    }

    private async UniTaskVoid MoveAsync()
    {
        await transform.DOMove(
           transform.position + Vector3.up, 1f).AsyncWaitForCompletion();
        await transform.DOMove(
           transform.position + Vector3.right, 2f).AsyncWaitForCompletion();
        await transform.DOMove(
           transform.position + Vector3.down, 3f).AsyncWaitForCompletion();
        await transform.DOMove(
           transform.position + Vector3.left, 4f).AsyncWaitForCompletion();
    }



ちなみに、下準備は以下のように行う必要があります。 ①DOTween Utility Panelを開き、「Create ASMDEF」ボタンを押す。(真ん中の青色のボタン)


このボタンを押すと、以下の場所に「DOTween.Modules.asmdef」ファイルが生成されます。

②PlayerSettingsを開き、Scripting Define Symbolsに「UNITASK_DOTWEEN_SUPPORT」と入力する。

おそらく、この①と②だけで下準備はOKのはずです。 この下準備を行えば、上記の実行例は以下のように書くことができます。
    void Start()
    {
        MoveAsync().Forget();
    }

    private async UniTaskVoid MoveAsync()
    {
        await transform.DOMove(transform.position + Vector3.up, 1f);
        await transform.DOMove(transform.position + Vector3.right, 2f);
        await transform.DOMove(transform.position + Vector3.down, 3f);
        await transform.DOMove(transform.position + Vector3.left, 4f);
    }
このほうがかなりスッキリとはしますね!
© 2024 Husky Studios, All rights reserved.