C# 在触发器函数中使用辅助函数

C# 在触发器函数中使用辅助函数,c#,function,triggers,unity3d,C#,Function,Triggers,Unity3d,我试图使用helper函数使函数暂停几秒钟,但它不执行wait函数 这就是我一直在使用的代码: 代码: public class Triggers : MonoBehaviour { IEnumerator wait(float seconds) { Debug.Log("In wait"); yield return new WaitForSeconds(seconds); Debug.Log("after wait"); }

我试图使用helper函数使函数暂停几秒钟,但它不执行wait函数

这就是我一直在使用的代码:

代码:

public class Triggers : MonoBehaviour {
    IEnumerator wait(float seconds) {
        Debug.Log("In wait");
        yield return new WaitForSeconds(seconds);
        Debug.Log("after wait");
    }

    void OnTriggerEnter(Collider _collider)
    {
        Debug.Log("Destroy");
        gameObject.SetActive(false);
        Debug.Log("Before wait");
        wait(5);
        Debug.Log("activate");
        gameObject.SetActive(true);
    }
}
我非常感谢你的帮助

试试这个:

StartCoroutine(wait(5));
而不是简单的“等待(5)”


这就是C#中协同程序的工作方式,如果我记得很清楚的话…

我通过停用子对象解决了这个问题,子对象是我想在与不可见的父对象发生冲突时隐藏的实际“物理”对象。因此,现在父对象保持活动状态,计算时间和物理对象“立方体”dis在n秒后出现并重新出现

   public class Triggers : MonoBehaviour
{
    IEnumerator wait (float seconds)
    {
        Debug.Log ("In wait");
        GameObject go = GameObject.Find ("Cube");
        go.SetActive(false);
        yield return new WaitForSeconds(seconds);
        Debug.Log ("after wait");
        go.SetActive (true);
    }

    void OnTriggerEnter (Collider _collider)
    {
        Debug.Log ("Destroy");
        Debug.Log ("Before wait");
        StartCoroutine (wait (5));
        Debug.Log ("activate");

    }

它给了我一个错误,因为游戏对象处于非活动状态,所以无法启动协同程序。还有其他解决方案吗?如果这没有达到您的预期效果,您可以尝试将脚本附加到对象层次结构中的另一个
monobhavior
。如果将脚本附加到空的父对象
GameObject
,会发生什么情况,并激活/停用您的
游戏对象
,该对象将作为此空对象的子对象移动?我解决了问题,我将能够在2小时内发布解决方案。谢谢你的帮助!