【问题标题】:How to remove gameobjects from a new List and reset list size back to 0?如何从新列表中删除游戏对象并将列表大小重置为 0?
【发布时间】:2019-07-10 18:24:01
【问题描述】:

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

我尝试了 list.clear() 方法,但接收到的大小为 1 并且缺少(游戏对象)。我还尝试了一个 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。

【问题讨论】:

  • 您是否尝试过在 RemoveObjectsFromList 方法中重新实例化您的列表?
  • 你不应该这样做@davedno .. Clear 会清空列表.. 鉴于这没有达到 OP 的要求,建议他们也希望删除这些对象
  • @davedno Like this " ObjectList = new List(); " ?
  • @BugFinder 同意,但 OP 已经尝试过这些方法,所以我想覆盖基础。谢谢。
  • ObjectList 在您的示例中属于 List 类型。这是您写的类型,还是拼写错误,应该是List&lt;GameObject&gt; 类型?如果是这样,Clear 将从List&lt;T&gt; 中删除对象。您查看的哪个属性表明列表中有一项?

标签: c# unity3d arraylist


【解决方案1】:

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

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

所以

一个包含 3 个项目的列表(因为我有点懒)

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

现在你删除 1.... 留下 0...

你需要反向删除..

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

或.clear ..

但是,您尝试 .Clear 的事实表明“对象”可能也需要被销毁?

比如

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

【讨论】:

  • 所以我尝试了您的方法,该方法将对象从列表中清除,但列表的大小仍保持为 1,并且不会返回 0,显示元素 0 [缺少游戏对象]。当我尝试将其重新实例化为新列表时,不幸的是没有任何反应。
  • 你是如何检查尺寸的?大小和数量之间存在差异您确定没有添加到您的列表中吗?
【解决方案2】:

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

为了能够在脚本 1 中的所有脚本中使用变量,它们需要 静态

问题:

不正确: public List ObjectList = new List();

正确: public Static List ObjectList = new List();

我很抱歉。

【讨论】:

  • 哇...这和你问的问题完全没有关系。
  • @BugFinder 这将帮助可能遇到相同错误的任何人,但如果您对此问题有更好的标题,我可以更改它以最适合此问题。
  • 我怀疑他们会找到它。您的问题是您有 2 个列表,并且在一种情况下正在查看错误的列表..
猜你喜欢
  • 2021-11-22
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多