从逻辑上讲,这段代码对我来说很好,但是当我运行动画未激活或停用的代码时,它无法正常工作。我把qwerty int放在那里用于测试目的。
void WaitingForPipe () {
qwerty = 1;
PipeEntry.GetComponent <Animator>().enabled=true;
Wait ();
qwerty = 2;
//yield return new WaitForSeconds(2);
PipeEntry.GetComponent<Animator>().enabled=false;
qwerty = 3;
//GameObject.Find("FPSController").GetComponent("FirstPersonController").enabled=true;
}
IEnumerator Wait()
{
//This is a coroutine
//Debug.Log("Start Wait() function. The time is: "+Time.time);
//Debug.Log( "Float duration = "+duration);
yield return new WaitForSeconds(2); //Wait
//Debug.Log("End Wait() function and the time is: "+Time.time);
}
答案 0 :(得分:2)
C#中的协程不是通过调用它们运行的方法,只能在UnityScript中运行。要在C#中启动Coroutine,您必须在StartCoroutine(YourCoroutine());
个实例上调用MonoBehaviour
。
如果代码如下所示,您的代码将会起作用:
IEnumerator WaitingForPipe()
{
PipeEntry.GetComponent <Animator>().enabled=true;
yield return new WaitForSeconds(2);
PipeEntry.GetComponent<Animator>().enabled=false;
}
你必须从某个地方使用StartCoroutine(WaitingForPipe());
启动协同程序。
您可以在官方文档中详细了解Coroutines:https://docs.unity3d.com/Manual/Coroutines.html
答案 1 :(得分:1)
在运行Wait ();
之前,您似乎要等待2秒钟。如果这是真的那么你必须yield
你的Wait ();
功能。
更改
Wait ();
到
yield return Wait();
并且您必须将WaitingForPipe
函数更改为协同程序函数,以便您可以在其中生成。 void WaitingForPipe ()
应为IEnumerator WaitingForPipe ()
代码无法启动/停止动画
您的问题中没有启动或停止动画的代码,您不必也不应该启用/禁用Animator以播放或停止动画。那是错的。 删除PipeEntry.GetComponent <Animator>().enabled=true/false
代码。
这是播放/停止动画的正确方法:
播放强>:
string stateName = "Run";
Animator anim = GetComponent<Animator>();
anim.Play(stateName);
<强>停止强>:
anim.StopPlayback();