C# 在返回void的函数中使用yield WaitForSeconds()
我在比赛中有一种跳跃恐惧。我使用的是Unity 3D。 我的第一个功能是C# 在返回void的函数中使用yield WaitForSeconds(),c#,unity3d,wait,void,yield-return,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毫秒内出现然后消失。 我用 但由于某种原因,只要函数返回的不是void,就永
public void ScareMe(Vector3 pos) {
//it does some necessary irrelevant
//stuff and then it invokes another function
Invoke ("Smile",.2f);
}
在我的另一个函数中,我想让一个对象在0.2毫秒内出现然后消失。
我用
但由于某种原因,只要函数返回的不是void,就永远不会调用函数Smile
有没有办法使用像收益率这样的东西,但绕过它,这样我就不必归还任何东西?
我在想一个像协同程序一样的循环?但是我不知道该怎么做。如果我没记错的话,Unity的Invoke(func)只愿意在Javascript中启动一个协同程序,其中void和协同程序之间的区别不那么严格
我要做的是使用
start例程(Smile())编码>并开始微笑,另一个返回新的WaitForSeconds(0.2f)代码>,或者更好的方法是让微笑获取float smileDelay
参数,并将其用于等待秒。嗯Thread.Sleep(ms)
。听起来像。如果你能解释一下你想要实现什么,那就更好了。你能告诉我们你想要实现什么(以及为什么)而不是告诉我们你是如何试图解决这个问题的吗?很可能有不同的方法来解决这个问题,但我们只能在知道实际问题是什么的情况下才能提供帮助。这必须在迭代器块中吗?否则您可以使用wait Task.Delay(1000)代码>。如果这没有帮助,请给我们更多的背景。我不知道你在抱怨什么,你所有的其他问题似乎都有答案。另外,在5条(现在是6条)不是你写的评论中,有3条是想帮你。
IEnumerator Smile() {
Object.SetActive(true);
yield return new WaitForSeconds(0.2f);
Object.SetActive(false);
}