我正在制作一个使用DOTween弹出弹出屏幕的动画。
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()的情况下,您应该解决它。
为此,我需要创建一个返回任务的方法,但我不知道如何实现。
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 ???
}我希望能就该做什么提供任何帮助。
发布于 2022-05-30 07:53:10
正如@rbcode所提到的,您应该使用序列。这是一个强大的工具,可以让你结合吐温,添加回调等。
在您的例子中,应该是这样的:
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之前添加回调。
sequence.AppendCallback(() => {
//Insert your logic here.
});
sequence.Play();发布于 2022-05-30 07:14:24
使用序列特征 of DOTween。第二个DOScale-command被忽略,因为第一个-command尚未完成。
发布于 2022-05-30 15:34:58
作为选项,您可以使用https://github.com/Cysharp/UniTask#external-assets来实现DoTween异步。它是免费的,而且很容易使用。
https://stackoverflow.com/questions/72429226
复制相似问题