2014-01-31 1 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();