首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在DOTween中实现异步?

如何在DOTween中实现异步?
EN

Stack Overflow用户
提问于 2022-05-30 04:38:33
回答 3查看 1K关注 0票数 2

我正在制作一个使用DOTween弹出弹出屏幕的动画。

代码语言:javascript
复制
private void OnEnable()
{
  dialogueBoxTransform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
  dialogueBoxTransform.DOScale(new Vector3(1.2f, 1.2f, 1.2f), 0.2f);
  dialogueBoxTransform.DOScale(Vector3.one, 0.1f);
}

上面代码的问题是其中一个DOScale()方法被忽略了。

因此,我正在尝试使用异步实现它-等待

但是,当我使用Task.Run()时,它会抛出一个异常,因为它不是主线程。因此,在不使用Task.Run()的情况下,您应该解决它。

为此,我需要创建一个返回任务的方法,但我不知道如何实现。

代码语言:javascript
复制
private async void OnEnable()
{
  dialogueBoxTransform.localScale = new Vector3(0.7f, 0.7f, 0.7f);

  await Test();
      
  dialogueBoxTransform.DOScale(Vector3.one, 0.1f);
}

private Task Test()
{
  dialogueBoxTransform.DOScale(new Vector3(1.2f, 1.2f, 1.2f), 0.2f);
  return ???
}

我希望能就该做什么提供任何帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-05-30 07:53:10

正如@rbcode所提到的,您应该使用序列。这是一个强大的工具,可以让你结合吐温,添加回调等。

在您的例子中,应该是这样的:

代码语言:javascript
复制
dialogueBoxTransform.localScale = new Vector3(0.7f, 0.7f, 0.7f);

var sequence = DOTween.Sequence();
sequence.Append(dialogueBoxTransform.DOScale(new Vector3(1.2f, 1.2f, 1.2f), 0.2f));
sequence.Append(dialogueBoxTransform.DOScale(Vector3.one, 0.1f));

sequence.Play();

如果要在序列完成后执行代码,则可以在调用Play之前添加回调。

代码语言:javascript
复制
sequence.AppendCallback(() => {
   //Insert your logic here.
});

sequence.Play();
票数 3
EN

Stack Overflow用户

发布于 2022-05-30 07:14:24

使用序列特征 of DOTween。第二个DOScale-command被忽略,因为第一个-command尚未完成。

票数 1
EN

Stack Overflow用户

发布于 2022-05-30 15:34:58

作为选项,您可以使用https://github.com/Cysharp/UniTask#external-assets来实现DoTween异步。它是免费的,而且很容易使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72429226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档