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

为何Unity中GameObject双向销毁仅单向生效?销毁逻辑问题

问题分析与解决方案

问题根源

你的代码中使用 GameObject.FindWithTag("Card") 只会返回场景中第一个带有 Card 标签的活跃 GameObject。这就导致了两种情况:

  • 如果当前执行代码的 GameObject 是层级中第一个 Card,FindWithTag 会找到自身,最终只会销毁当前对象,另一个 Card 不会被处理。
  • 如果当前执行代码的 GameObject 是层级中第二个 Card,FindWithTag 会找到第一个 Card,此时两个对象都会被销毁。

这就是为什么只有其中一个对象能正常触发双向销毁的原因。SetAsLastSibling() 只是调整了对象在层级中的顺序,并没有从根本上解决「只找第一个匹配对象」的问题,所以无法彻底修复。

解决方案

改用 GameObject.FindGameObjectsWithTag("Card") 获取所有带有 Card 标签的对象,然后遍历销毁每一个:

// 获取所有带有Card标签的GameObject
GameObject[] allCards = GameObject.FindGameObjectsWithTag("Card");
// 遍历销毁每一张卡牌
foreach (GameObject card in allCards)
{
    Destroy(card);
}

这样无论哪张卡牌触发代码,都会找到所有 Card 对象并全部销毁,确保双向操作生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:42:27