🦔
DOTweenでasync/awaitを利用する
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が利用できるようになったかと思います。
Discussion