代码无法启动/停止动画

时间:2018-03-08 13:36:30

标签: c# unity3d

从逻辑上讲,这段代码对我来说很好,但是当我运行动画未激活或停用的代码时,它无法正常工作。我把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);
} 

2 个答案:

答案 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();