如何从新列表中删除游戏对象并将列表大小重置为0?

时间:2019-07-10 18:24:01

标签: c# unity3d arraylist

当前,我遇到了一个将游戏对象添加到新列表()的问题,但是当我清除列表时,无法将列表大小恢复为0。我收到一个Missing(游戏对象)并且列表大小仍为“ 1”。

我尝试了list.clear()方法,但收到的大小为1,并且缺少(Gameobject)。我也尝试过使用forloop来获取计数,然后使用RemoveAt(i)方法,但收到的计数相同。

我正在使用Unity的Inspector直观地看到此问题。

示例:

public GameObject Object;

public List<GameObject> ObjectList = new List<GameObject>();

public void AddObjectToList()
{
    ObjectList.Add(Object);
}

public void RemoveObjectsFromList()
{
    //Attempt 1
    ObjectList.Clear();

    //Attempt 2
    for (int i = 0; i < ObjectList.Count; ++i)
    {
        ObjectList.RemoveAt(i);
    }

}

期望从列表中清除游戏对象,并将列表大小恢复为0。

2 个答案:

答案 0 :(得分:0)

让我们看看您的列表删除代码。

   for (int i = 0; i < ObjectList.Count; ++i)
    {
        ObjectList.RemoveAt(i);
    }

所以

包含3个项目的列表(我有点懒惰)

i = 0,在0处删除。所以现在您有了0和1.。 我++

现在您删除1 ....保留0 ...

您需要反向移除。.

所以对于i = count-1到0 ..如果您需要说删除游戏对象或其他东西,

或.clear ..

但是,您尝试过的事实。清除表明也许“对象”也需要销毁?

例如

   for (int i = ObjectList.Count-1; i >= 0; i--)
    {
        Destroy(ObjectList[i]);
        ObjectList.RemoveAt(i);
    }

答案 1 :(得分:0)

谢谢您的帮助,但我找到了答案,如果我以前曾提到过,这可能对所有人都有帮助。我正在使用两个单独的脚本。脚本1作为具有所有游戏对象的主控制器,并列出了脚本1调用了脚本2中的功能的功能,这些功能利用了脚本1中的变量。

要能够在所有脚本中使用脚本1中的变量,它们必须是静态

问题

错误:公共列表 ObjectList =新列表();

更正:公共静态列表 ObjectList =新列表();

抱歉。