UniTask icon indicating copy to clipboard operation
UniTask copied to clipboard

How can I await function in OnUpdate of Dotween

Open zrp2016 opened this issue 1 year ago • 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) ?

zrp2016 avatar Mar 22 '24 03:03 zrp2016

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).

migus88 avatar Jun 30 '24 14:06 migus88