2014-01-31 5 views
1

Я делаю игру. Я просматриваю все дочерние компоненты в объекте и делаю из него список, а затем удаляю первую запись, потому что я не хочу ее. Ошибка при попытке удалить первую запись. В Google ничего не говорится об этом, все это КАК сделать его доступным только для чтения.Почему мой IList доступен только для чтения?

Я получаю эту ошибку:

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]); 
} 

ответ

1

Эта линия твоей:

characterChilds = new List<Transform>(); 

Создает изменяемый список. Однако, следующая строка:

characterChilds = transform.GetComponentsInChildren<Transform>(); 

Заменяет этот список, и поэтому предыдущая строка бесполезна. Очевидно, GetComponentsInChildren возвращает IList, который не подлежит изменению. Если вы действительно хотите, чтобы начать от результата этого вызова метода и все еще быть в состоянии изменить список, вы можете попробовать:

characterChilds = new List<Transform>(transform.GetComponentsInChildren<Transform>()); 

Теперь вы можете удалить элементы из этого списка, но не больше контекста, я я не уверен, что будет делать именно то, на что вы надеетесь.

+0

Спасибо! Я понимаю, что происходит сейчас, и ваше решение отлично работает. Принят ваш ответ, когда это позволит мне. – Jared

2

Кажется, что метод GetComponentsInChildren возвращает неизменяемую коллекцию. Вы можете попробовать следующее:

characterChilds = transform.GetComponentsInChildren<Transform>().ToList(); 
Смежные вопросы