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

Using yield WaitForSeconds() in a function returning void

我的游戏中有跳跃恐吓。我正在使用 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);
 }

但出于某种原因,只要它 return 不是无效的,我的函数 Smile 就永远不会被调用。

有没有什么方法可以使用 yield 之类的东西,但绕过它,这样我就不必 return 任何东西了? 我在想像协程一样的 while 循环?但是我不知道该怎么做。

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

我会做的是使用 StartCoroutine(Smile()); 并使用另一个 yield return new WaitForSeconds(0.2f); 启动 Smile,或者更好的是让 Smile 使用 float smileDelay 参数并将其用于 WaitForSeconds。