도드넷
유니티 for문과 List remove 버그에 대해서? 본문
유니티 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번째 항을
지우라고 명령하면 될것같다.
반응형
'창고 > 나만의 게임 제작' 카테고리의 다른 글
도드의 개발노트#2 - 스프라이트 빛 받게하기. (0) | 2016.09.20 |
---|---|
도드의 개발노트#1 - 유니티 스프라이트 테두리 만들기 (0) | 2016.09.20 |
유니티 C# LIST ArgumentOutOfRangeException Argument is out of range 에러! (1) | 2016.09.07 |
도드의 유니티 API#6 - ONGUI CLICK 만드는 방법 UI 우클릭시 발동 (1) | 2016.09.06 |
도드의 유니티 API#5 - hex 컬러 코드값을 rgb로 반환해서 color 객체만들기!! (0) | 2016.09.04 |