C# 堆栈中的每个对象都将为null

C# 堆栈中的每个对象都将为null,c#,unity3d,stack,gameobject,C#,Unity3d,Stack,Gameobject,我不想在点击堆栈时读取游戏对象中的每个孩子。 之后,我想销毁所有这些对象,因此它们不会显示 在我的计划中,这些对象应该在堆栈中仍然可用。 但是如果我想再次从堆栈中添加对象,它们都是空的 我是Unity的新手,不知道为什么这不起作用 如果以前有人问过这个问题,我很抱歉,但我没有看到任何类似的问题 else if(!stacked) { for (int i = 0; i < parent.transform.childCount; i++)

我不想在点击堆栈时读取游戏对象中的每个孩子。 之后,我想销毁所有这些对象,因此它们不会显示

在我的计划中,这些对象应该在堆栈中仍然可用。 但是如果我想再次从堆栈中添加对象,它们都是空的

我是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;
            }
        }
else如果(!堆叠)
{
对于(int i=0;i

这是我的代码。

我不认为您正在处理对象的实际深度副本

因此,这里:

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
ed。我不知道销毁方法是如何实现的,但我确认如果您处置/销毁它,实际上您将引用同一块内存。所以,摧毁一个,也会摧毁被推动的一个


除此之外: 推送时,您不需要验证:
parent.transform.GetChild(i).gameObject
。你确定它不在那里吗


另外,
stacked=!堆叠:您的逻辑意味着这可以设置为显式。如
stacked=true
。在你的情况下:我建议它防止潜在的错误


本部分:

go = new GameObject();
go = aufgenommeneKarten.Pop();
似乎使用了一个字段
go
:这在几种情况下可能有点棘手。我确认最好跳过第一行:

//go = new GameObject();  not needed
go = aufgenommeneKarten.Pop();

你为什么要破坏?它不会被垃圾收集吗?你能展示一下
Destroy
方法吗?Destroy方法是Unity的普通方法,我没有改变那里的任何东西。public static void Destroy(Object obj){float t=0.0f;Object.Destroy(obj,t);}对象在for循环完成后被销毁,并且在这之后,堆栈中填充了null值sso,您尝试过不销毁它吗?我尝试过了,这样堆栈仍然是满的,谢谢。但像这样,这些物体显然没有被摧毁。那么是否有可能克隆游戏对象并将其推送到阵列中?好的,谢谢。如果我在销毁之前进行调试,则这些项会在销毁之后被销毁,堆栈上有值。围棋是一个游戏对象,我不确定我是否需要第一行。是否有可能将其复制到一个新内存中,这样它就不会被销毁?“如果我在销毁之前进行调试,堆栈上就会有值”。。。我的意思是,销毁方法也会作用于推送对象,这可能会导致意外行为。这就是为什么我会问:你能展示destroy函数吗?``公共静态void destroy(Object obj){float t t=0.0f;Object.destroy(obj,t);}``这是Unity的方法