티스토리 뷰

카테고리 없음

Today I Learned - Day 84 [코루틴]

불면증 도사 2025. 1. 13. 23:39

오늘은 '코루틴을 이용한 함수 절차 확정법'과 '코루틴 매니저'를 간단하게 정리하려고 했었다,

그래서 참고 URL을 넣으려고 검색한 결과... 코루틴이 없다...?!

실제로 코루틴은 오브젝트 라이프 사이클을 다룰 때에 잠깐 언급되고 끝이었다.

그런 고로, 오늘은 코루틴을 정리하겠다.


코루틴 사용법

코루틴 함수

public IEnumerator CoroutineFunction(param)
{
	...
    yield return ...
    ...
}

 

코루틴 사용

Coroutine routine = StartCoroutine(CoroutineFunction(param));

 

코루틴 종료

StopCoroutine(routine); // 단일 코루틴 종료
StopAllCoroutine(); // 모든 코루틴 종료

 

코루틴은 위 방식으로 사용한다.

사용된 코루틴은 yield return 문에 작성된 내용에 따라서 다양한 방식으로 기존 코드와 '동시에' 동작하게 된다.

 


yield return 문의 종류

yield return null

다음 프레임 까지 대기한다. 사실상 Update와 동일한 타이밍.

 

yield return new WaitForEndOfFrame()

모든 Update()가 끝나고 화면 렌더링 까지 끝날 때 까지 대기한다. LateUpdate()와 유사한 타이밍.

 

yield return new WaitForFixedUpdate()

FixedUpdate가 끝날 떄 까지 대기한다. FixedUpdate와 유사한 타이밍.

 

yield return new WaitForSeconds(float seconds)

seconds 만큼의 시간 동안 대기한다. timeScale의 영향을 받는다.

 

yield return new WaitForSecondsRealtime(float seconds)

seconds 만큼의 시간 동안 대기한다. timeScale의 영향을 받지 않는다.

 

yield return new WaitUntile(condition_calculation)

condition_calculation 조건을 만족(true)할 때 까지 대기한다.

 

yield return new WaitWhile(condition_calculation)

condition_calculation 조건을 만족(true)하는 동안 대기한다.

 

yield return StartCoroutine(Coroutine routine)

routine 코루틴이 끝날 때 까지 대기한다.


코루틴을 이용해서 구현할 수 있는 요소는 정말로 많다.

절차 상의 순서를 만들어낼 수도 있고, 일정 시간 이후에 자동으로 발동되는 기능을 만들 수도 있으며, 아예 이걸로 Update문을 모방하는 것도 가능하다.

오브젝트 라이프 사이클 사이에 끼어드는 방식이라서 시스템 부하도 통상 코드와 큰 차이 없다.

 

단지, MonoBehaviour에서만 사용 가능하다는 점과, 코루틴을 실행하는 도중 해당 오브젝트가 비활성화 혹은 파괴되면 에러가 유발된다는 점은 주의하자.

참고로, CoroutineManager 같은 싱글톤에 델리게이트를 이용해서 MonoBehaviour가 아닌 클래스에서도 코루틴을 쓸 수 있도록 구성할 수도 있다. 이를 이용해서 할 수 있는 요소들도 많으니, 알아두면 좋을 것이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함