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

Unity中循环调用Destroy()为何仅删除一个克隆对象?

Unity循环销毁克隆对象仅删除一个的原因及解决办法

问题原因

  • Destroy()并非立即销毁对象,只是给对象标记待销毁状态,要等当前帧所有逻辑执行完毕后,Unity才会真正把对象从场景中移除。
  • 你的循环在同一帧里跑了5次,每次调用GameObject.Find("coin")时,第一次标记销毁的那个对象还没被真正移除,所以每次Find到的都是同一个对象——等于重复给它打了5次销毁标记,最终自然只销毁这一个。

正确写法

方法一:先批量获取所有目标对象再销毁

推荐用标签或者类型来批量查找,比多次调用GameObject.Find效率高:

// 获取所有带"coin"标签的对象(前提是给克隆对象加了对应标签)
GameObject[] allCoins = GameObject.FindGameObjectsWithTag("coin");
// 取前5个销毁,避免数组长度不足时出错
int countToDestroy = Mathf.Min(5, allCoins.Length);
for(int i = 0; i < countToDestroy; i++)
{
    Destroy(allCoins[i]);
}

方法二:克隆时维护对象列表(更高效)

如果是你自己克隆的对象,最好在克隆时就把它们存到一个列表里,后续销毁直接从列表取,不用反复查找:

// 提前定义列表存克隆的硬币
List<GameObject> coinClones = new List<GameObject>();

// 克隆对象时添加到列表
GameObject newCoin = Instantiate(你的硬币预制体);
coinClones.Add(newCoin);

// 需要删除前5个时
int destroyCount = Mathf.Min(5, coinClones.Count);
for(int i = 0; i < destroyCount; i++)
{
    Destroy(coinClones[0]); // 每次删列表第一个
    coinClones.RemoveAt(0);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:41:30