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

Unity中飞机碰撞可破坏立方体未销毁问题及解决方法

飞机撞击立方体不销毁/无响应的修复方案

嘿,我来帮你搞定这个碰撞失效的问题!根据你描述的情况,飞机弹开但立方体没反应,大概率是碰撞事件没触发或者脚本逻辑没生效,咱们一步步排查修复:

常见问题排查与修复步骤

  • 给立方体补上Rigidbody组件
    你的碰撞脚本是挂在立方体上的,但如果立方体没有Rigidbody,它属于静态碰撞体,Unity的物理引擎不会触发静态碰撞体自身的OnCollisionEnter方法。给立方体添加Rigidbody后,哪怕把Gravity设为0(防止立方体下落),也能让碰撞事件正常触发,同时物理交互也会生效(立方体被撞击后会移动)。

  • 检查Collider的Is Trigger选项
    如果立方体的Collider不小心勾选了Is Trigger,那原来的OnCollisionEnter就完全没用了——触发事件需要用OnTriggerEnter。要么取消Is Trigger勾选,要么把脚本改成下面这样(注意参数是Collider而非Collision):

    using UnityEngine;
    public class collision : MonoBehaviour {
        void OnTriggerEnter(Collider col) {
            if (col.gameObject.name == "breakableBox") {
                Destroy(col.gameObject);
            }
        }
    }
    
  • 核对物体名称的准确性
    脚本里判断的是col.gameObject.name == "breakableBox",一定要确保立方体的名称完全匹配:大小写、空格都不能错,比如叫BreakableBox或者breakable box都会导致匹配失败。去Hierarchy面板里确认下立方体的名字吧。

  • 确认脚本挂载正确
    选中立方体,在Inspector面板里看看collision脚本是不是真的挂上去了,有没有被意外禁用(脚本名称旁边的勾选框要亮着)。

备选方案:把脚本移到飞机上

如果不想给立方体加Rigidbody,也可以把碰撞脚本挂在飞机上——飞机本身带Rigidbody(动态物体),即使碰撞静态立方体,也能触发自身的OnCollisionEnter事件。修改后的脚本如下(名字可以改得更清晰):

using UnityEngine;
public class PlaneCollisionHandler : MonoBehaviour {
    void OnCollisionEnter(Collision col) {
        if (col.gameObject.name == "breakableBox") {
            Destroy(col.gameObject);
        }
    }
}

按上面的步骤排查,应该就能解决问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:28:49