Stack 中的每个对象都为空

Every Object in Stack gets null

我不想在单击 Stack 时从 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;
            }
        }

这是我的代码。

我不认为你正在处理对象的实际深层副本。

所以在这里:

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();