UniTaskの利用

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)

public static UniTask ToUniTask(this YieldAwaitable awaitable) ;

説明

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();
	}
}