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