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

Unity对象未按预期销毁,附ArrowScript脚本求助排查是否为VS问题

Unity对象无法销毁问题排查方案

该故障几乎不可能是Visual Studio本身导致的,问题均出在Unity侧的逻辑或配置错误,可按以下顺序排查:

  • 第一步先验证OnCollisionEnter2D是否被正常触发:在方法内添加Debug.Log("碰撞已触发"),运行游戏后查看Unity控制台是否有对应日志输出
    • 若无日志输出,优先检查碰撞相关配置:
      • 箭头与碰撞对象必须都挂载Collider2D组件,且至少其中一个对象挂载了非运动学(Kinematic未勾选)的Rigidbody2D组件
      • 两个对象的Collider2D都未勾选Is Trigger,如果使用触发模式需将回调方法改为OnTriggerEnter2D
      • 检查「项目设置 > 物理2D > 层碰撞矩阵」,确认两个对象所属层级的碰撞权限已开启
  • 第二步验证代码是否正常编译同步:
    • 确认Unity编辑器底部状态栏无编译报错,你当前代码中注释掉的Destroy(effect, 5f)行缺失分号,但注释状态下不影响编译,若实际代码中有未注释的语法错误会导致代码不生效
    • 确认ArrowScript脚本确实挂载到了需要销毁的箭头对象本体,而非其父子对象
  • 第三步如果确认回调已触发但对象仍存在,检查是否有其他脚本在同一帧对该对象调用了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:09:03