在返回void的函数中使用yield WaitForSeconds()

时间:2015-03-08 07:40:11

标签: c# unity3d wait void yield-return

我的比赛中有一个跳跃比赛。我正在使用Unity 3D。 我的第一个功能是

public void ScareMe(Vector3 pos) {
    //it does some necessary irrelevant 
    //stuff and then it invokes another function
    Invoke ("Smile",.2f);
}

在我的其他功能中,我想让对象出现,然后在0.2毫秒内消失。 我用

 IEnumerator Smile() {
     Object.SetActive(true);
     yield return new WaitForSeconds(0.2f);
     Object.SetActive(false);
 }

但由于某种原因,我的函数Smile永远不会被调用,只要它返回其他的东西然后无效。

有没有什么方法可以使用像屈服之类的东西但是绕过它所以我不必返回任何东西? 我正在考虑像协程一样的循环?但我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

如果我没记错的话,Unity的Invoke(func)只愿意在Javascript中启动一个协程,其中void和协程之间的区别不那么严格。

我要做的是使用StartCoroutine(Smile());并使用另一个yield return new WaitForSeconds(0.2f);开始微笑,或者更好的是让Smile获取float smileDelay参数并将其用于WaitForSeconds。