【发布时间】:2018-12-18 22:47:17
【问题描述】:
** Unity5.6.5f1 / C#
我使用协程来运行动画。
而不是在更新函数中创建多个 if 语句,
我认为协程会更好。
但我认为我使用 'yield return new WaitForSeconds' 太多了,
这样写协程很常见吗?
private IEnumerator AnimationControl()
{
yield return new WaitForSeconds(41f);
objAni.gameObject.SetActive(true);
obj2Ani.gameObject.SetActive(true);
obj3Ani.gameObject.SetActive(true);
objAni.Play("Stay");
obj2Ani.Play("Stay");
obj3Ani.Play("Stay");
yield return new WaitForSeconds(5.667f);
objAni.Play("Run");
obj2Ani.Play("Run");
obj3Ani.Play("Action");
yield return new WaitForSeconds(3.666f);
objAni.Play("Fire01");
yield return new WaitForSeconds(2.334f);
obj3Ani.Play("Panic");
obj2Ani.gameObject.SetActive(false);
yield return new WaitForSeconds(8.333f);
objAni.Play("Fire02");
yield return new WaitForSeconds(6.333f);
objAni.Play("Fire03");
yield return new WaitForSeconds(6.1337f);
obj3Ani.Play("Stay");
objAni.Play("Stay");
yield return new WaitForSeconds(3.2003f);
obj3Ani.Play("Surprise02");
objAni.Play("Surprise");
yield return new WaitForSeconds(3.333f);
obj3Ani.Play("Run");
objAni.Play("Run");
yield return new WaitForSeconds(6f);
objAni.Play("Stay");
yield return new WaitForSeconds(1.667f);
objAni.Play("Run");
yield return new WaitForSeconds(2.333f);
obj3Ani.gameObject.SetActive(false);
yield return new WaitForSeconds(0.667f);
objAni.gameObject.SetActive(false);
yield return new WaitForSeconds(1.333f);
textObj.SetActive(false);
yield return new WaitForSeconds(2.667f);
endingObj.SetActive(true);
allObj.SetActive(false);
}
感谢阅读。
【问题讨论】:
-
这看起来就像一场等待发生的灾难。您应该研究如何在 Unity 中制作正确的动画。
-
最好在每次等待后提及并显示您正在运行的代码。我认为这将决定是否有更好的方法来做到这一点
-
看起来您正在尝试制作过场动画。协程可能会起作用,但正确的做法是使用 Animators 和 Timelines。
-
我添加了代码。