Unity3d 协同路由不工作,所有代码立即调用,没有任何收益或等待
我试图调用一个协程,该协程设置一些变量,等待几秒钟,然后将它们设置回原位 不幸的是,整个协同程序正在一次全部启动,没有等待。在这种情况下,几乎就好像根本没有调用函数一样Unity3d 协同路由不工作,所有代码立即调用,没有任何收益或等待,unity3d,Unity3d,我试图调用一个协程,该协程设置一些变量,等待几秒钟,然后将它们设置回原位 不幸的是,整个协同程序正在一次全部启动,没有等待。在这种情况下,几乎就好像根本没有调用函数一样 public void Dash(){ lastDashTime = Time.time + dashWaitDuration; motionBlur (); //this call is not working as expected animator.SetFloat ("Speed", 0);
public void Dash(){
lastDashTime = Time.time + dashWaitDuration;
motionBlur (); //this call is not working as expected
animator.SetFloat ("Speed", 0);
playerRigidBody.MovePosition (playerRigidBody.position + transform.forward * 1.75f);
}
//this is the coroutine
IEnumerator motionBlur(){
print ("Hello");
camMotionBlur.jitter = 10;
camMotionBlur.enabled = true;
yield return new WaitForSeconds (2);
camMotionBlur.enabled = false;
camMotionBlur.jitter = 0.125f;
}
如果您试图在C#中启动协同例程,则需要调用
startcroutine
:
StartCoroutine(motionBlur());
您需要使用StartCustomer调用IEnumerator。检查。代码如下:
StartCoroutine(motionBlur ());
之后,您的代码将正常工作。它将返回一个枚举器对象,等待您在执行从
yield return
到motionBlur
方法末尾的所有操作之前对其进行枚举。你永远不会那样做。您将丢弃未使用的IEnumerator
。这是一个常见的统一习语吗?我一点也不知道,天哪,哈哈,我完全忘记了,对不起,没有任何事情发生在我们最好的人身上。快乐编码!谢谢山姆·马里恩…:-)