Coroutine(코루틴)Unity에서 사용되는 비동기적인 코드 실행 방식 중 하나이다.
코루틴은 함수나 메서드가 동작 중에 중지되고 나중에 다시 시작할 수 있도록 해준다. 따라서 게임 루프나 프레임 업데이트와는 별도로 실행되며, 특정 조건이나 시간 지연을 기다리거나 순차적으로 여러 단계의 작업을 수행하는 데 사용 수 있다.
코루틴은 일반적으로 선언에서 IEnumerator 를 사용해서 함수를 선언하고, 반드시 return을 yield 키워드를 사용해야만 한다.
IEnumerator MyCoroutine() {
yield return null
}
위와 같이 선언한 코루틴함수를 StartCoroutine() 함수를 이용해 호출하고 StopCoroutine()함수를 이용해서 원할때 정지시킨다.
✨주의점
이 코루틴 함수에서 코루틴을 멈추기 위해서는 호출과 멈춤을 모두 ""
문자열을 이용해서 맞춰주거나, 하나의 코루틴일 경후 전부 멈추거나, 코루틴자체를 변수에 담은 후에 멈춰주어야만 동작한다.
이유는 모르겟지만, 메뉴얼에서 코루틴 함수 내 호출할때 MyCoroutine()
로 호출하면 StopCoroutine(MyCoroutine()
아무리 사용해도 코루틴이 멈추지 않는 현상이 있다.
StartCoroutine("MyCoroutine")
StartCoroutine(MyCoroutine())
StopCoroutine("MyCoroutine")
StopAllCoroutine()
비동기 작업 처리
프레임 업데이트 분리
복잡한 상태 머신 구현
코루틴 함수에서 특히나 특수한 상황을 만들 수 있게 해주는 부분이 yield return 이후 나오는 함수이다.
yield return null; // 1프레임 대기
yield return new WaitForSeconds(2.0f); // 2초 대기
yield return new WaitForFixedUpdate(); // 다음 FixedUpdate까지 대기
yield return new WaitForSecondsRealtime(2.0f); // 실제 경과 시간과 상관없이 2초 대기
yield return StartCoroutine(SomeOtherCoroutine()); // 다른 코루틴 실행 후 완료 대기
Func<bool>
predicate): 지정한 조건(predicate)이 true가 될 때까지 대기한다. yield return new WaitUntil(() => playerHealth <= 0); // 플레이어 체력이 0 이하일 때까지 대기