코루틴을 여러 번 호출하는 경우

박민주·2022년 3월 11일
0

Unity

목록 보기
24/40
post-thumbnail

요즘 알게 된 점

  • Unity 스크립트를 작성할 때 생각보다 Update()를 잘 안쓴다
  • 되도록 코루틴으로 해결할 수 있다면 코루틴을 사용하자

Update

Update() {
	// 조건이 true이면, A 지점에 도착할 때까지 이동해라
}

Coroutine

// 조건이 true일 때 호출되는 코루틴 
while(true) {
     yield return null;
     // A 지점에 도착할 때까지 이동
     // 이동이 완료되었으면 코루틴 중단 
}

근데 이런 식의 코루틴은 Start에서 실행하지 못하는 경우가 많았다.
보통 게임 중간에 어떤 조건이 만족되면 실행해야 하기 때문인데,
주의해야 할 점은 여러 번 동일한 코루틴을 시작시키는 일은 없도록 해야한다.

왜냐면, 코루틴은 다음과 같은 특징이 있기 때문이다.

  • 코루틴은 별도의 스레드처럼 독립적으로 실행된다.
  • 코루틴을 시작하면 해당 인스턴스가 생성되고 실행된다.
  • 동일한 코루틴을 다시 시작하면 다른 인스턴스가 생성되고, 앞서 생성된 인스턴스와 독립적으로 실행된다.

일반적인 오류

  • Update()에서 코루틴을 시작하면 프레임마다 새 인스턴스가 생성된다.
  • 이는 메모리를 꽉 채우고 소모하게 된다..!
  • 몇 분안에 CPU Time을 잡아먹는다.

솔루션

  • 코루틴이 시작될 때 설정되고 완료되면 지워지는 bool 변수를 사용하는 것.
  • 코루틴을 다시 시작하기 전에 이 bool 변수를 확인하는 것

참고
https://answers.unity.com/questions/309613/calling-startcoroutine-multiple-times-seems-to-sta.html

profile
Game Programmer

0개의 댓글