관리 메뉴

도드넷

유니티 for문과 List remove 버그에 대해서? 본문

창고/나만의 게임 제작

유니티 for문과 List remove 버그에 대해서?

도드! 2016. 9. 7. 16:01
반응형





유니티 for문과 List remove 버그에 대해서?

List의 길이로 반복문 돌리는데 그 반복문이 절반만 실행되는 경우.


만약 for문 내에서 리스트에 해당 요소를 지우라는 remove 명령이 내려진 경우

1회차 회전후 지워지고 for문의 조건검사 부분에도 영향을 미치게 된다.


예를 들어서


만약에 [선택된 유닛]이라는 리스트에 4개의 유닛이 들어가있다고 하자.


4개의 유닛을 모두 리스트에서 지우고자 [for문 + 리스트의 길이]라는 반복문으로 지우겠다고 하면


1회전시 remove 명령에 의해 요소가 삭제되어 리스트의 길이가 줄어들어 3이 되고

2회차 반복때에는 리스트의 길이가 2가 된다.


이때마침 반복횟수 인수인 k도 2에 도달하므로 반복문이 멈추게 된다.


즉 리스트의 길이를 두고 for 반복문을 설정했는데 for반복문 안에서 요소를 하나씩 지울경우 "절반만"

돌아가게 된다는 이야기다. ㅡ,.ㅡ


어찌보면 당연하지만 array -> list로 시스템을 변경하면서 일어난일로 for문의 작동방식과 고정된 크기를 가진 array와 list의 차잇점을 다시한번 느낄수있게 됬다.


해결법

반복문 밖에서 Clear()를 불러서 모두 날려버리거나

일단 리스트의 길이를 다른 변수에 저장한다음에 그걸로 for문 만들고 루프마다 0번째 항을

지우라고 명령하면 될것같다.






반응형
Comments