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

Unity 3D绑定摄像机聚光灯的BoxCollider与RigidBody碰撞检测失效求解

问题原因
  • 回调函数选择错误:OnCollisionEnter是物理碰撞回调,仅在双方Collider均未开启Is Trigger、且至少一方挂载非运动学Rigidbody时才会触发。而手电筒照射属于区域触发检测,通常会给聚光灯的BoxCollider开启Is Trigger,此时OnCollisionEnter完全不会响应。
  • 基础配置不符合要求:
    • 碰撞双方未满足触发/碰撞的组件要求:触发检测要求至少一方挂载Rigidbody组件,物理碰撞要求至少一方挂载非运动学Rigidbody
    • 项目Layer碰撞矩阵关闭了双方所在层的碰撞权限
    • 聚光灯对象名称与代码中判断的Spot_Light不完全匹配,存在大小写、空格、拼写差异
  • 脚本挂载位置错误:OnCollisionEnter脚本未挂载在参与碰撞的带Rigidbody的对象上
解决方案
  1. 调整检测逻辑适配触发场景
    勾选聚光灯挂载的BoxCollider的Is Trigger属性,将物理碰撞回调替换为触发回调,修改后的代码如下:
    void OnTriggerEnter(Collider other) {
        if (other.gameObject.name == "Spot_Light") {
            Debug.Log("detected");
            test = 375;
        }
    }
    
  2. 补全/修正组件配置
    • 给聚光灯对象添加Rigidbody组件,勾选Is Kinematic避免聚光灯受物理力影响产生位移
    • 确认被检测物体已挂载Collider组件
    • 打开Edit > Project Settings > Physics,检查Layer Collision Matrix,确认碰撞双方所在层的对应碰撞复选框为勾选状态
  3. 校验对象名称:直接复制聚光灯对象的完整名称,替换代码中的Spot_Light字符串,排除拼写误差
  4. 确认脚本挂载在带Rigidbody的被检测物体上;如果需要将脚本挂载在聚光灯上,可调整判断逻辑为校验被碰撞物体的名称/标签即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 08:27:03