Solution
1. foreach → for 문으로 변경
하나의 아이템을 찾는 경우라면, 아래 처럼 foreach를 사용할 수 있다.(break로 나가서 다음 순회를 하지 않기 때문에.)
foreach(var data in someList){
if(data == null){
someList.Remove(data);
break;
}
}
2. reverse하게 탐색하기
줄어버린 List의 index에 접근을 못하고 넘어가버리는 경우가 발생하기때문에 List의 모든 항목을 점검하지 못하게될 수 있다. 따라서 거꾸로 탐색하여 제거한다.
void ReturnPool()
{
for (int i = monsters.Count - 1; i >= 0; i--)
{
if (!monsters[i].gameObject.activeInHierarchy) // 비활성화 된 몬스터
{
ReturnParent(monsters[i]);
}
}
}
3. RemoveAll() 사용하기
movieCollection.RemoveAll(movie => movie.Contains(removeMovie));
아이템을 추가할 때는 AddRange() 사용하기
리스트를 순회하면서 아이템 추가가 되지 않기 때문에, 임시 리스트에 추가할 항목을 저장하고, AddRange로 확장하기.
var itemsToAdd = new List<string>();
foreach (var movie in movieCollection)
{
if (movie.Contains(duplicateMovie))
{
itemsToAdd.Add(duplicateMovie);
}
}
movieCollection.AddRange(itemsToAdd);
'Unity Errors' 카테고리의 다른 글
스파인 Additive Material 설정이 None으로 되어있을 때. (0) | 2022.10.14 |
---|