Unity对象未按预期销毁,附ArrowScript脚本求助排查是否为VS问题
Unity对象无法销毁问题排查方案
该故障几乎不可能是Visual Studio本身导致的,问题均出在Unity侧的逻辑或配置错误,可按以下顺序排查:
- 第一步先验证
OnCollisionEnter2D是否被正常触发:在方法内添加Debug.Log("碰撞已触发"),运行游戏后查看Unity控制台是否有对应日志输出- 若无日志输出,优先检查碰撞相关配置:
- 箭头与碰撞对象必须都挂载
Collider2D组件,且至少其中一个对象挂载了非运动学(Kinematic未勾选)的Rigidbody2D组件 - 两个对象的
Collider2D都未勾选Is Trigger,如果使用触发模式需将回调方法改为OnTriggerEnter2D - 检查「项目设置 > 物理2D > 层碰撞矩阵」,确认两个对象所属层级的碰撞权限已开启
- 箭头与碰撞对象必须都挂载
- 若无日志输出,优先检查碰撞相关配置:
- 第二步验证代码是否正常编译同步:
- 确认Unity编辑器底部状态栏无编译报错,你当前代码中注释掉的
Destroy(effect, 5f)行缺失分号,但注释状态下不影响编译,若实际代码中有未注释的语法错误会导致代码不生效 - 确认
ArrowScript脚本确实挂载到了需要销毁的箭头对象本体,而非其父子对象
- 确认Unity编辑器底部状态栏无编译报错,你当前代码中注释掉的
- 第三步如果确认回调已触发但对象仍存在,检查是否有其他脚本在同一帧对该对象调用了
DontDestroyOnLoad,或是有逻辑在销毁后重新生成了同名对象导致误判
如果你需要恢复特效生成逻辑,可参考修正后的代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ArrowScript : MonoBehaviour { // 需在Inspector面板为该字段赋值对应的碰撞特效预制体 public GameObject hiteffect; void OnCollisionEnter2D(Collision2D collision) { GameObject effect = Instantiate(hiteffect, transform.position, Quaternion.identity); Destroy(effect, 5f); Destroy(gameObject); } }
内容的提问来源于stack exchange,提问作者Viperthesniper
相关产品推荐
相关产品推荐

