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

