UniTaskを導入している場合、ToUniTaskメソッドが利用可能になります。
対応バージョン
UniTask Ver.2.0.32以降
利用準備
Package Managerからインポートした場合
自動的に有効化されます。
特に準備は必要ありません。
unitypackageをインポートした場合
Player SettingsのScripting Define SymbolsへARBOR_SUPPORT_UNITASKを追加してください。
アセンブリ定義
アセンブリ定義(Assembly Definition)を使用してアセンブリを分割している場合は、Arbor.UniTask.asmdefへの参照を追加する必要があります。
必要に応じてAssembly Definition Referencesのリストに「Assets/Plugins/Arbor/External/UniTask/Arbor.UniTask.asmdef」への参照を追加してください。
設定方法の詳細はアセンブリの定義を参照してください。
またArborの基本的なアセンブリ定義についてはこちらを参照してください。
ToUniTask(YieldAwaitable)
説明
YieldAwaitableをUniTask型に変換します。
使用するにはusing Arbor.Threading.Tasks;の追加も必要です。
パラメータ
| パラメータ名 |
説明 |
| awaitable |
変換するYieldAwaitable |
戻り値
変換結果のUniTask。
使用例
async/awaitの使用例をUniTaskで実装する例です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
using UnityEngine;
using Cysharp.Threading.Tasks;
using Arbor;
using Arbor.Threading.Tasks;
[AddComponentMenu("")]
public class ExampleAwaitBehaviourUniTask : StateBehaviour
{
public StateLink nextState;
async UniTask WaitFrame(int frameCount)
{
try
{
int startFrame = Time.frameCount;
for (int i = 0; i < frameCount; i++)
{
await Yield().ToUniTask();
}
Debug.Log($"{Time.frameCount - startFrame}");
Transition(nextState);
}
catch (System.Exception ex)
{
if (ex is System.OperationCanceledException)
{
return;
}
Debug.LogException(ex);
}
}
public override void OnStateBegin()
{
WaitFrame(10).Forget();
}
}
|