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

Unity场景中销毁实例化GameObject而非Prefab的问题求助

解决Unity中销毁Prefab实例而非资源的错误问题

问题出在你销毁的对象不对——你调用Destroy(b)时,传入的是Project面板里的原始Prefab资源,而非Instantiate(b)生成的场景实例。Unity为了防止误删资源,禁止直接销毁Project里的资产,所以触发了这个错误。

正确做法很简单:

  • 实例化时保存返回的场景对象:
    // 把Instantiate的返回值存到变量里,这个才是场景中的实例
    GameObject spawnedMarker = Instantiate(b, targetPosition, Quaternion.identity);
    
  • 销毁时针对这个保存的实例操作:
    // 销毁场景里的标记实例,而非原始Prefab
    Destroy(spawnedMarker);
    

如果需要批量管理这些标记实例,可以用一个集合来统一存储:

// 定义列表存储所有生成的标记实例
List<GameObject> allMarkerInstances = new List<GameObject>();

// 实例化时添加到列表
GameObject newMarker = Instantiate(b, spawnPos, Quaternion.identity);
allMarkerInstances.Add(newMarker);

// 批量清理时遍历销毁
foreach (var marker in allMarkerInstances)
{
    Destroy(marker);
}
allMarkerInstances.Clear();

别用DestroyImmediate尝试绕开限制,这个方法是给编辑器脚本用的,运行时使用会导致资源损坏或异常,完全没必要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:20:33