destroyCancellationTokenとは?
destroyCancellationToken
はMonoBehaviour
のプロパティで、
GameObject
やMonoBehaviour
が破棄(Destroy
)されたタイミングでキャンセルされるCancellationToken
を取得できます。
Unity2023.1
以降で使用できます。
使い方1
以下のスクリプトを用意しました。
public class DestroyCancellationTokenSample : MonoBehaviour
{
private async void Start()
{
try
{
await Task.Delay(3000, destroyCancellationToken);
Debug.Log("Task completed successfully.");
}
catch (OperationCanceledException)
{
Debug.Log("Task Canceled.");
}
}
}
Start
メソッドを非同期で実行し、3000ミリ秒待機します。
時間が経過する前にGameObject
が破棄された場合は、例外が発生しcatch
側が呼ばれます。
使い方2
以下のサンプルでは、destroyCancellationToken
のRegister
メソッドに、
GameObject
が破棄されるタイミングで実行される処理を登録することができます。
public class DestroyCancellationTokenSample : MonoBehaviour
{
private void Awake()
{
destroyCancellationToken.Register(() =>
{
Debug.Log("Canceled.");
});
}
}
これは非同期処理に限らず、オブジェクトの破棄に合わせて後始末の処理を行いたい時に便利です。
UI
のイベントを解除する- オブジェクトが破棄される際にログを取る
MonoBehaviour
を継承していない純粋なクラスの後処理を呼ぶ
などに使用できます。
まとめ
destroyCancellationToken
はUnity2023
以降に追加された比較的新しい機能です。
非同期処理のキャンセル用トークンとして使用できます。
非同期処理でなくてもコールバックを登録しておくことで、破棄されるタイミングで処理を呼び、
イベントを解除したりメモリを解放したりできます。
機会があれば是非使ってみてください。