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

Unity 3D拾取系统穿模且物体未销毁问题如何修复?

问题排查与修复方案

1. 代码逻辑错误

你编写的触发回调参数类型错误,OnTriggerEnter对应的参数类型是Collider,你写的Collision是普通碰撞回调OnCollisionEnter的参数,类型不匹配时Unity不会触发该回调,自然不会执行销毁逻辑。
修正后的代码如下:

using UnityEngine;

public class PickupObject : MonoBehaviour
{
    // 调整参数类型为Collider
    void OnTriggerEnter(Collider other)
    {
        // 推荐使用CompareTag对比标签,比直接判断字符串效率更高,拼写错误时也会主动报错
        if (other.CompareTag("Player"))
        {
            Destroy(gameObject);
        }
    }
}

如果你需要玩家不会穿过拾取物,碰撞到拾取物就销毁,无需勾选拾取物碰撞体的Is Trigger选项,此时把回调方法名改为OnCollisionEnter,参数保留Collision类型即可。

2. 组件配置检查

代码修正后如果仍不生效,按以下要求检查组件配置:

  • 拾取物侧配置
    • 挂载了对应类型的碰撞体组件(3D项目用Box Collider/Sphere Collider等,2D项目用对应2D碰撞体)
    • 用触发逻辑的话需要勾选碰撞体的Is Trigger属性
    • 已挂载修正后的PickupObject脚本
  • 玩家侧配置
    • 挂载了非trigger状态的对应类型碰撞体
    • 挂载了刚体组件(3D项目用Rigidbody,2D项目用Rigidbody2D,Unity要求触发/碰撞事件的双方至少有一个携带刚体才会触发回调)
    • 玩家物体的Tag已正确设置为Player,大小写、拼写完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:39:03