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

Unity中Sprite与Cube碰撞失效求助:碰撞时未销毁Princess Sprite

解决Unity中Sprite与Cube碰撞不触发的问题

我来帮你排查下这个碰撞逻辑没生效的问题!你已经给Sprite加了Rigidbody和Box Collider,但Cube还是直接穿过去,OnCollisionEnter没触发,大概率是这几个细节没设置对:

  • 检查Cube的碰撞体配置
    因为Cube是代码生成的,一定要确认它身上添加了Collider组件(比如BoxCollider),而且不要勾选Is Trigger。如果Cube没有Collider,物理引擎根本不会识别它的碰撞。另外,如果Cube被设置为Static(层级面板顶部的Static勾选了),也可能干扰碰撞检测,除非你在Sprite的Rigidbody里调整了碰撞模式。

  • 修正Sprite的Rigidbody设置
    看看Sprite的Rigidbody有没有勾选Is Kinematic?如果勾了这个选项,物体就会忽略物理碰撞,完全不会触发OnCollisionEnter。你需要把这个选项取消掉,除非你打算用触发式检测(后面会提到)。

  • 核对Layer碰撞矩阵
    打开Edit → Project Settings → Physics,找到Layer Collision Matrix,确保Sprite所在的层和Cube所在的层是允许互相碰撞的。如果这两个层被设置为不碰撞,就算都有Collider也白搭。

  • 确认脚本挂载位置
    你写的OnCollisionEnter代码是挂在Sprite(princess)上的对吧?要是不小心挂到Cube或者其他物体上,逻辑肯定不会生效。检查下脚本的附着对象是不是princess。

  • 试试触发式检测(备选方案)
    如果上面的都排查过还是不行,可以换用触发式检测:把Sprite或者Cube其中一个的Collider勾选Is Trigger,然后把代码改成下面这样:

private void OnTriggerEnter(Collider other)
{
    if (other.gameObject.name == "Cube")
    {
        Destroy(this.gameObject);
    }
}

另外提个小建议:用物体名称判断碰撞对象容易出错,比如生成的Cube可能自动带上后缀(比如Cube(1)),或者名字拼写有误。更可靠的方式是给Cube设置一个专属Tag(比如EnemyCube),然后用other.CompareTag("EnemyCube")来判断,这样容错性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:56:18