C# “OnCollisionCenter()中的协程(WaitForSeconds())给出编译错误

C# “OnCollisionCenter()中的协程(WaitForSeconds())给出编译错误,c#,unity3d,C#,Unity3d,我想做一个平板游戏,我想在x秒后降低平台的重力。但它给出了一个complile错误,即它不能使用,因为void不是内部接口类型。我是一个乞丐,我迫不及待地想继续我的项目。谢谢你的时间,我为我糟糕的英语感到抱歉 private void OnCollisionEnter(Collision collision) { if (collision.gameObject.name == "Platform(Clone)") { numberOfJumps = 2;

我想做一个平板游戏,我想在x秒后降低平台的重力。但它给出了一个complile错误,即它不能使用,因为void不是内部接口类型。我是一个乞丐,我迫不及待地想继续我的项目。谢谢你的时间,我为我糟糕的英语感到抱歉

 private void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.name == "Platform(Clone)")
    {
        numberOfJumps = 2;
        Debug.Log("Platform hit");
    }

    //Maake platforms fall
    yield return new WaitForSeconds(2f);
    collision.rigidbody.useGravity = enabled;
    yield return null;
}

您应该创建一个协同程序,然后在OnCollisionCenter内部调用它。Void意味着该方法没有返回类型,这就是为什么会出现编译错误

IENumerator Fall(Rigidbody rigidbody)
{
    //Make platforms fall
    yield return new WaitForSeconds(2f);
    rigidbody.useGravity = enabled;

}

private void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.name == "Platform(Clone)")
    {
        numberOfJumps = 2;
        Debug.Log("Platform hit");
    }
    StartCoroutine(Fall(collision.rigidbody));
}

您应该创建一个协同程序,然后在OnCollisionCenter内部调用它。Void意味着该方法没有返回类型,这就是为什么会出现编译错误

IENumerator Fall(Rigidbody rigidbody)
{
    //Make platforms fall
    yield return new WaitForSeconds(2f);
    rigidbody.useGravity = enabled;

}

private void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.name == "Platform(Clone)")
    {
        numberOfJumps = 2;
        Debug.Log("Platform hit");
    }
    StartCoroutine(Fall(collision.rigidbody));
}
您只能在协程函数中让步。不能从一个空函数中删除。一些Unity回调函数(如Start函数)可以设置为void或coroutine函数。幸运的是,OnCollisionCenter函数就是其中之一,因此只需将void更改为IEnumerator即可。这将在不需要手动启动新的协同程序功能的情况下工作。当发生冲突时,Unity将自动调用并启动它作为协同程序

private IEnumerator OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.name == "Platform(Clone)")
    {
        numberOfJumps = 2;
        Debug.Log("Platform hit");
    }

    //Maake platforms fall
    yield return new WaitForSeconds(2f);
    collision.rigidbody.useGravity = enabled;
    yield return null;
}
您只能在协程函数中让步。不能从一个空函数中删除。一些Unity回调函数(如Start函数)可以设置为void或coroutine函数。幸运的是,OnCollisionCenter函数就是其中之一,因此只需将void更改为IEnumerator即可。这将在不需要手动启动新的协同程序功能的情况下工作。当发生冲突时,Unity将自动调用并启动它作为协同程序

private IEnumerator OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.name == "Platform(Clone)")
    {
        numberOfJumps = 2;
        Debug.Log("Platform hit");
    }

    //Maake platforms fall
    yield return new WaitForSeconds(2f);
    collision.rigidbody.useGravity = enabled;
    yield return null;
}

您的函数没有返回值,因此返回新的WaitForSeconds2f;他错了。。你的英语很好,你的函数没有返回值,因此返回新的WaitForSeconds2f;他错了。。如果你的问题解决了,别忘了回答。如果你的问题解决了,别忘了回答。