본문 바로가기

유니티 게임 개발하기/2D 게임 개발일지

유니티 (C#스크립팅) - 코루틴이 잘 안 돌아가는 경우들 정리

안녕하세요? 윈디입니다.

유니티 내부에서 코루틴을 사용하다 보면, 코루틴이 잘 작동하지 않을 때가 종종 있습니다.


특히, 오브젝트가 삭제되거나 비활성화되거나, 혹은 스크립트 사이를 넘나들며 코루틴을 사용하다 보면, 코루틴이 잘 작동하지 않을 때가

종종 발생하는데요, 그래도 미리 알아두고 사용하다 보면 이런 오류들을 최대한 피하거나, 아니면 오류를 발견했을때 재빨리 해결할 수 있겠다는 생각이 들어서 제가 이번 게임을 코딩하면서 접한 몇 가지 오류들을 정리해 봤습니다.


일단 코루틴을 사용하는 이유는 원하는 만큼 스크립트를 쉬게 하여 연산에 큰 이득을 얻기 때문인데요,

코루틴의 개념 자체에 대해서는 여기에 포스팅 해 두었으니 참고해 보시는것도 좋을 것 같아요.


http://linecode.tistory.com/9


그래서 가장 자주 사용하는 이것, yield return new waitForSecond() ; 를 사용할 때 확인해야 할 것들을 적어 보았습니다.




1. 코루틴을 호출했던 스크립트가 yield return 시점부터 돌아갈 시점 사이에 비활성화/삭제 되어있으면, 코루틴은 더이상 동작하지 않는다.





   코루틴의 경우, return 을 통해 호출받은 스크립트로 돌아갔다가 일정 시간 후에 다시 호출이 되는 형식으로 동작하는 것 같습니다.

 따라서 return 시점에 돌아갈 스크립트가 활성화되어있지 않거나 삭제되어 있으면, 코루틴은 다시 돌아올 수 없는 길을 떠나버리게 되더군요.


2. (당연하지만) 코루틴을 실행하고 있는 스크립트가 비활성화/삭제 되어버리면, 코루틴은 그 시점부터 동작하지 않는다.




3. 코루틴 안에서 코루틴을 호출할 경우, 호출한 코루틴이 yield return 시점부터 돌아갈 시점 사이에 끝나있다면,  

호출받은 코루틴은 더이상 동작하지 않는다.

  

- 1과 같은 이유입니다.

yield break 같은 것들을 사용하실때 가끔 발생하니 꼭 주의해 주세요!



다 쓰고 보니, 당연한 것들만 써놨네요.... 조금 부끄럽기도 하지만 다시 실수하지 않는다는 의미에서 꼭 잊지 않아야겠습니다!