You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在OnCollisionEnter()中使用WaitForSeconds协程出现编译错误求助

解决Unity中OnCollisionEnter使用协程导致的“void不是内部接口类型”编译错误

嘿,这问题我熟!你遇到的编译错误,根源是你在OnCollisionEnter这个返回值为void的方法里使用了协程特有的yield return语句——Unity的普通void方法没法当作协程来跑,协程要求方法的返回类型必须是IEnumerator,而OnCollisionEnter是Unity内置的碰撞回调,必须保持void返回,所以直接这么写肯定报错。

正确的解决思路

把延迟禁用重力的逻辑抽成一个独立的协程方法,然后在OnCollisionEnter里通过StartCoroutine()来启动这个协程就行。

修改后的完整代码

private void OnCollisionEnter(Collision collision) { 
    if (collision.gameObject.name == "Platform(Clone)") { 
        numberOfJumps = 2; 
        Debug.Log("Platform hit"); 
        // 启动协程处理延迟重力禁用逻辑
        StartCoroutine(DisablePlatformGravityAfterDelay(collision));
    } 
}

// 独立的协程方法,处理延迟逻辑
private IEnumerator DisablePlatformGravityAfterDelay(Collision collision) {
    // 等待2秒
    yield return new WaitForSeconds(2f); 
    // 注意:这里你原来写的enabled可能是笔误?要禁用重力应该设为false
    if(collision.rigidbody != null) {
        collision.rigidbody.useGravity = false; 
    }
    yield return null; 
}

额外提醒

  • 一定要加collision.rigidbody != null的判断,避免碰到没有Rigidbody的物体时出现空引用错误
  • 你原来代码里的useGravity = enabled大概率是笔误,enabled是当前脚本的启用状态,如果你要禁用平台重力,应该直接设为false

内容的提问来源于stack exchange,提问作者Gergely Bálint Szabó

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:23:10