destroyCancellationTokenとは?

destroyCancellationTokenMonoBehaviourのプロパティで、

GameObjectMonoBehaviourが破棄(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

以下のサンプルでは、destroyCancellationTokenRegisterメソッドに、

GameObjectが破棄されるタイミングで実行される処理を登録することができます。

public class DestroyCancellationTokenSample : MonoBehaviour
{
    private void Awake()
    {
        destroyCancellationToken.Register(() =>
        {
            Debug.Log("Canceled.");
        });
    }
}

これは非同期処理に限らず、オブジェクトの破棄に合わせて後始末の処理を行いたい時に便利です。

  • UIのイベントを解除する
  • オブジェクトが破棄される際にログを取る
  • MonoBehaviourを継承していない純粋なクラスの後処理を呼ぶ

などに使用できます。

まとめ

destroyCancellationTokenUnity2023以降に追加された比較的新しい機能です。

非同期処理のキャンセル用トークンとして使用できます。

非同期処理でなくてもコールバックを登録しておくことで、破棄されるタイミングで処理を呼び、

イベントを解除したりメモリを解放したりできます。

機会があれば是非使ってみてください。