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
相关产品推荐
相关产品推荐

