代码之家  ›  专栏  ›  技术社区  ›  Romaldowoho

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

  •  3
  • Romaldowoho  · 技术社区  · 9 年前

    我的游戏中有一个惊吓。我正在使用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);
     }
    

    但由于某种原因,只要函数返回了除void以外的其他值,就不会调用Smile函数。

    有什么方法可以使用收益率之类的东西,但要绕过它,这样我就不必返回任何东西了吗? 我在想一段时间的循环,就像是一次合作?但我不知道该怎么做。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Robert Mock    9 年前

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

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