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

Unity 2020.3.15f2中OnCollisionEnter不触发 故障排查求助

Unity OnCollisionEnter 不生效问题解决方案

核心原因

Unity碰撞事件默认仅发送到碰撞体(Collider)挂载的游戏对象、以及该碰撞体关联的刚体(Rigidbody)挂载的游戏对象,不会自动向上传递给父对象。你当前将带OnCollisionEnter的脚本挂载在父级对象上,但SphereCollider、Rigidbody组件均挂载在子对象上,因此父对象无法接收碰撞回调。

可行解决方案

  • 方案1:直接将带OnCollisionEnter逻辑的脚本移动到带有SphereCollider和Rigidbody的子对象上,是成本最低的适配方案。
  • 方案2:如果逻辑必须保留在父对象中,可在子对象上挂载碰撞中转脚本,示例代码如下:
// 挂载到带有Collider、Rigidbody的子对象上
public class CollisionTransfer : MonoBehaviour
{
    void OnCollisionEnter(Collision col)
    {
        // 替换为你父对象上的脚本类名,调用父对象的碰撞处理逻辑
        GetComponentInParent<你父对象的脚本类名>()?.OnCollisionEnter(col);
    }
}
  • 方案3:如果需要父对象统一管理所有子碰撞体的碰撞事件,可给父对象挂载Rigidbody组件,删除子对象上的Rigidbody,子对象的Collider会作为父刚体的复合碰撞体,此时父对象上的OnCollisionEnter即可正常触发。

其他排查项(可选)

  • 确认挂载脚本的父对象处于激活状态、脚本组件未被禁用
  • 确认Unity控制台未过滤普通Info级别的日志
  • 确认两个碰撞对象的层级未在项目物理碰撞矩阵中被禁用交互

内容的提问来源于stack exchange,提问作者GuinoAlaska

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:54:02