如何在 DOTween 中实现异步?
How to implement async in DOTween?
我正在制作一个使用 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()
方法之一被忽略了。
所以我正在尝试使用 async-await 来实现它。
但是,当我使用Task.Run()
时它抛出异常,因为它不是主线程。所以,不使用Task.Run()
,你应该解决它。
为此,我需要创建一个 returns 任务的方法,但我不知道该怎么做。
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 ???
}
如果能帮助我做什么,我将不胜感激。
使用 DOTween 的 sequence feature。第二个 DOScale
-command 被忽略,因为第一个还没有完成。
正如@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();
作为选项,您可以将 https://github.com/Cysharp/UniTask#external-assets 用于 DoTween 异步。它免费且易于使用。
我正在制作一个使用 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()
方法之一被忽略了。
所以我正在尝试使用 async-await 来实现它。
但是,当我使用Task.Run()
时它抛出异常,因为它不是主线程。所以,不使用Task.Run()
,你应该解决它。
为此,我需要创建一个 returns 任务的方法,但我不知道该怎么做。
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 ???
}
如果能帮助我做什么,我将不胜感激。
使用 DOTween 的 sequence feature。第二个 DOScale
-command 被忽略,因为第一个还没有完成。
正如@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();
作为选项,您可以将 https://github.com/Cysharp/UniTask#external-assets 用于 DoTween 异步。它免费且易于使用。