memomem

備忘録・メモ置き場

イベントをTaskでawaitする

TaskCompletionSource を使用する

Timelineを再生し終了するまでのTask

public async Task ShowAhimAsync(CancellationToken token = default)
    {
        var tcs = new TaskCompletionSource<int>();

        System.Action<PlayableDirector> handler = null;
        handler = (obj) =>
        {
                playableDirector.stopped -= handler;
                tcs.SetResult(0);
        };
        playableDirector.stopped += handler;

        playableDirector.time = 0;
        playableDirector.Play(showAsset, DirectorWrapMode.None);

        using(token.Register(() =>
        {
            // キャンセル発生時の処理
            playableDirector.stopped -= handler;
            tcs.SetCanceled();
        }))
        {
            await tcs.Task;
        }
    }

var tcs = new TaskCompletionSource();

としたかったが、Unityでは使えないのか引数は必要なかったがnew TaskCompletionSource<int>()を使用している。

参考

qiita.com

zenn.dev

days-of-programming.blogspot.com

enrike3.hatenablog.com

qiita.com

qiita.com

osamuk.hatenablog.jp

note.com