Cysharp/UniTask

How can I await function in OnUpdate of Dotween

zrp2016 opened this issue · 1 comments

See code as following

 _cameraTransform.DOMove(pos, doTweenTime).OnUpdate(() =>
        {
            await MoveEvent.Broadcast(_cameraTransform.position);//when camera move ,refresh some UI
        }).OnComplete(() =>
        {
            _lockTouch = false;
            finishCallback?.Invoke(src);
        });

so how can I await "MoveEvent.Broadcast"(itself is awaitable) ?

Don't think it should be in the issues, because it isn't.
You have multiple approaches here. If you just want the code to compile, append the async keyword to the lambda expression:

.OnUpdate(async () => {  } )

Otherwise you can remove the await keyword and append the .Forget() method to the result of the Broadcast method:

MoveEvent.Broadcast(_cameraTransform.position).Forget();

Or you can remove the await keyword and ignore the compiler warning:

MoveEvent.Broadcast(_cameraTransform.position);

All of the above will do a "fire-and-forget" method. Meaning that the "OnUpdate" method will not wait for the end of the execution of your broadcast and depending on the duration of the broadcast method, it can receive multiple invocations.

If you want for each update to wait for the end of the execution, I don't think that DoTween is the way to go here. You'd rather implement the movement on your own with UniTasks (or Coroutines).