首页 > 解决方案 > “OnCollisionEnter()”中的协程 (WaitForSeconds()) 给出编译错误

问题描述

我正在尝试制作一个平台游戏,我想在 x 秒后禁用平台的重力。但它给出了一个无法使用的编译错误,因为它void不是内部接口类型。

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

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

标签: c#unity3d

解决方案


您只能在coroutine函数中屈服。你不能从一个void函数。一些 Unity 回调函数,如Start函数,可以做成void协程函数。幸运的是,该OnCollisionEnter功能就是其中之一,因此只需 voidIEnumerator. 这无需手动启动新的协程函数即可工作。当发生碰撞时,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;
}

推荐阅读