我正在制作游戏。我搜索对象中的所有子组件并从中创建一个列表,然后删除第一个条目,因为我不想要它。我尝试删除第一个条目时发生错误。谷歌似乎没有关于此事的任何内容,一切都是如何让它成为只读。
我收到此错误:
NotSupportedException: Collection is read-only
System.Array.InternalArray__RemoveAt (Int32 index) (at /Users/builduser/buildslave/monoAndRuntimeClassLibs/build/mcs/class/corlib/System/Array.cs:147)
(wrapper managed-to-managed) UnityEngine.Transform[]:System.Collections.Generic.IList`1.RemoveAt (int)
PlayerEquipper.Start () (at Assets/PlayerEquipper.cs:27)
这是我的代码:
private IList<Transform> characterChilds = new List<Transform>();
private IList<Transform> armorChilds = new List<Transform>();
private IList<Transform> glovesChilds = new List<Transform>();
private IList<Transform> bootsChilds = new List<Transform>();
void Start()
{
characterChilds = new List<Transform>();
characterChilds = transform.GetComponentsInChildren<Transform>();
Debug.Log(characterChilds[0]);
characterChilds.RemoveAt(0);
Debug.Log(characterChilds[0]);
}
答案 0 :(得分:2)
似乎GetComponentsInChildren
方法返回一个不可变的集合。您可以尝试以下方法来解决它:
characterChilds = transform.GetComponentsInChildren<Transform>().ToList();
答案 1 :(得分:1)
你的这一行:
characterChilds = new List<Transform>();
创建一个可变列表。但是,以下行:
characterChilds = transform.GetComponentsInChildren<Transform>();
覆盖该列表,因此上一行无用。显然,GetComponentsInChildren
会返回不可修改的IList
。如果你真的想从该方法调用的结果开始并仍然能够修改列表,你可以尝试:
characterChilds = new List<Transform>(transform.GetComponentsInChildren<Transform>());
现在,您可以从该列表中删除项目,但如果没有更多上下文,我不确定它是否会完全符合您的希望。