🦔

DOTweenでasync/awaitを利用する

2023/03/11に公開

Environment

  • Unity: 2020.3.25f1
  • DOTween (HOTween v2): Version 1.2.632 - August 04, 2021
  • UniTask: Ver.2.3.1

UniTask

UniTaskというライブラリをインポートすることで実現します
Package Managerからインポートする手順はREADMEに記載があるので参考までに。(私は試しておりません)

Setting

Edit > Project Settings... > Player > Script Compilation > Script Define Symbols
に UNITASK_DOTWEEN_SUPPORT を入力してApplyする。
※ApplyしてもVisual Studioに反映されないことがあります。その場合はVisual Studioを再起動したり、Visual StudioでUnityにアタッチをしなおしてみたりしてください。

Code

DOTweenのコードを書いていきます。

2Dのケースのサンプルです。
スクリプトを作成し、なにかしらGameObjectにスクリプトを関連付けてこちらを実行すると、
3秒かけて拡大したあとにログが出力されることがわかります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using Cysharp.Threading.Tasks;

public class SampleMovement : MonoBehaviour
{

    
    async UniTask Start()
    {
        Debug.Log("before DOTween");
        await transform.DOScale(new Vector3(2f, 2f, 2f), 3f).AsyncWaitForCompletion();
        Debug.Log("after DOTween");
    }
    
}

ポイントとなる部分だけ抜き出していくと、usingに関しては以下を追加すること。

using DG.Tweening;
using Cysharp.Threading.Tasks;

メソッドの定義ではasyncを追加して返り値をUniTaskにすること。

async UniTask Start()

awaitするDOTweenにはAsyncWaitForCompletion()を追加してTaskを返すようにすること。

await transform.DOScale(new Vector3(2f, 2f, 2f), 3f).AsyncWaitForCompletion();

以上でとりあえずDOTweenでasync/awaitが利用できるようになったかと思います。

Reference

Discussion