为何驶过标记为Trigger且标签为Package的GameObject时,未触发‘Package picked up’提示?
问题排查与修复方案
确认脚本挂载对象
- 若脚本挂在Package上:当前
OnTriggerEnter2D里判断other.gameObject.CompareTag("Package")是错误的,此时other是车辆对象,永远不会匹配。需改成判断车辆的标签,比如:void OnTriggerEnter2D(Collider2D other) { if (other.gameObject.CompareTag("Vehicle")) // 需给车辆设置对应标签 { Debug.Log("Package picked up"); } } - 若脚本挂在车辆上:检查Package的标签是否为
Package(大小写完全一致,无拼写错误)。
- 若脚本挂在Package上:当前
检查刚体设置
- 确保至少有一个对象的Rigidbody2D未勾选Kinematic(运动学),Unity触发事件要求不能两个对象都是运动学刚体。
- 刚体的Body Type不能是Static,需设为Dynamic或Kinematic(但不能两者都是Kinematic)。
检查碰撞体设置
- 车辆的Collider2D不能勾选Is Trigger,触发事件需要一个Trigger碰撞体(Package)和一个非Trigger碰撞体(车辆)配合。
- 勾选Scene视图的Gizmos,可视化查看两个碰撞体的范围,确认车辆驶过时有实际重叠。
基础碰撞测试
- 暂时取消Package碰撞体的Trigger勾选,开车撞击,若控制台输出
Oof!,说明基础碰撞检测正常,问题仅出在触发器设置;若仍无输出,检查脚本是否启用、组件是否正常挂载(脚本、Rigidbody2D、Collider2D都不能被禁用)。
- 暂时取消Package碰撞体的Trigger勾选,开车撞击,若控制台输出
内容的提问来源于stack exchange,提问作者Nienna
相关产品推荐
相关产品推荐

