堆栈中的每个对象都为空
Posted
技术标签:
【中文标题】堆栈中的每个对象都为空【英文标题】:Every Object in Stack gets null 【发布时间】:2020-10-25 13:50:08 【问题描述】:我不想在点击到堆栈时从 Gameobject 读取每个孩子。 之后我想销毁所有这些对象,所以它们不会显示出来。
在我的计划中,这些对象在堆栈中应该仍然可用。 但是如果我想再次从堆栈中添加对象,它们都是空的。
我是 Unity 新手,不知道为什么这不起作用。
很抱歉,如果之前有人问过这个问题,但我还没有看到任何类似的问题。
else if(!stacked)
for (int i = 0; i < parent.transform.childCount; i++)
aufgenommeneKarten.Push(parent.transform.GetChild(i).gameObject);
Destroy(parent.transform.GetChild(i).gameObject);
stacked = !stacked;
else
if (aufgenommeneKarten.Count != 0)
go = new GameObject();
go = aufgenommeneKarten.Pop();
go.transform.SetParent(parent.transform, false);
else
stacked = !stacked;
这是我的代码。
【问题讨论】:
你为什么要破坏?不会被垃圾回收吗? 你能展示Destroy
方法吗?
Destroy 方法是 Unity 的常规方法,我没有更改任何内容。 public static void Destroy(Object obj) float t = 0.0f; Object.Destroy(obj, t);对象在 for 循环完成后被销毁,然后堆栈被空值填充
那么,你试过不破坏它吗?
我试过了,就像这样,堆栈仍然满了,谢谢。但像这样,对象显然没有被破坏。那么是否有可能克隆 Gameobject 并将其推送到数组中?
【参考方案1】:
我不认为您正在使用对象的实际深层副本。
所以这里:
aufgenommeneKarten.Push(parent.transform.GetChild(i).gameObject);
Destroy(parent.transform.GetChild(i).gameObject); // this will act on the pushed object
推送的parent.transform.GetChild(i).gameObject
正在被Destroy
编辑。我不知道你的 Destroy 方法是如何实现的,但我侦察如果你 Dispose/destroy 等它,你实际上会引用同一块内存。所以,摧毁一个,也会摧毁被推动的。
最重要的是:
你什么都不做验证:parent.transform.GetChild(i).gameObject
当你推动它时。你确定那里不是null
?
另外,stacked = !stacked;
:您的逻辑暗示这可以明确设置。喜欢stacked = true
。在你的情况下:我会建议它防止潜在的错误。
这部分:
go = new GameObject();
go = aufgenommeneKarten.Pop();
似乎使用了一个字段go
:在几种情况下可能会有点棘手。我认为最好跳过第一行:
//go = new GameObject(); not needed
go = aufgenommeneKarten.Pop();
【讨论】:
好的,谢谢。如果我在销毁之前进行调试,则这些项目随后会被销毁,堆栈上有值。 go 是一个 GameObject,我不确定我是否需要第一行。是否有可能将其复制到新的内存中,以免被破坏? “如果我在销毁之前调试,堆栈上有值”...我的意思是你的销毁方法将作用于推送对象 - 这可能会导致意外行为。这就是为什么我要问:你能展示破坏功能吗? ``` public static void Destroy(Object obj) float t = 0.0f; Object.Destroy(obj, t); ``` 这是 Unity 的方法以上是关于堆栈中的每个对象都为空的主要内容,如果未能解决你的问题,请参考以下文章
当结构中的所有值都为空时,如何在 Scala spark 中使结构为空?
删除领域数据库对象,但即使所有对象都为空,领域文件大小也保持不变。并且在时间上变得太大了