Programming
-
Coroutine 내에서의 무한 루프 작성시 주의점
유니티 엔진을 이용해서 게임을 제작하다 보면 코루틴을 자주 사용하게 된다. 몇 초후에 문이 자동으로 열렸다가 닫힌다든지, 화상 데미지로 1초마다 데미지가 얼마씩 들어온다든지 하는 형식으로 말이다.
특정한 경우에는 코루틴을 실행시킨 다음에 안에 무한 루프문을 작동시키는 방식으로 코루틴을 유지하면서 사용하는 방법도 있다.
IEnumerator CoroutineFunction()
{
yield return null;
while(true)
{
Function();
}
}
다만 코루틴 내에서 무한 루프를 처리할 때 주의할 점이 있는데 위의 코드처럼 코루틴을 작성하면 유니티 에디터에서 실행하든 빌드를 해서 실행을 하든 프로그램이 응답없음이 뜨면서 정지를 할 것이다. 이 문제를 해결하는 방법은 매우 간단한데, 바로 while 무한 반복문 안에 yield return을 넣어주는 것이다.
올바른 코루틴 내의 무한 루프 사용법
IEnumerator CoroutineFunction()
{
while(true)
{
yield return null;
Function();
}
}
이 사태의 원인은 코루틴이 돌리는 무한 반복문이 시스템에 독점적으로 돌아가는 상태가 되었기 때문이다. 그렇기 때문에 이를 해결하기 위해서 반복문안에 반드시 yield return을 이용해서 시스템을 다른 코드에 양보해주는 것이 필수이다.
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
[투네이션]
[Patreon]
[디스코드 채널]
'Unity3D > Programming' 카테고리의 다른 글
[Unity3D] Input - 마우스 입력 총정리 (2017.3.0f3) (0) | 2018.09.21 |
---|---|
[Unity3D] Mobile - 모바일 앱에서 디바이스의 배터리 잔량 표시하기 (0) | 2018.09.17 |
[Unity3D] Programming - 커스텀 IEnumerator 클래스 만들기(Custon yield instruction) (1) | 2017.07.17 |
[Unity3D] 로딩 씬(Loading Scene) 구현하기 (11) | 2017.07.10 |
[Unity3D] 유니티에서 XML 사용하기 (3) | 2017.06.05 |