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