Unity
(Unity) 코루틴, Couroutine
Janny_
2022. 10. 12. 22:57
코루틴 (Couroutine)
유니티의 코루틴(Couroutine) 메서드는 대기 시간을 가질 수 있는 메서드입니다. 코루틴 메서드는 IEnumerator 타입을 반환해야 하며, 처리가 일시 대기할 곳에 yield 키워드를 명시해야 합니다.
코루틴의 동작 원리
집을 청소하는 메서드가 있다고 가정할 때, 일반적인 메서드는 한 번에 모든 방을 청소하는 방식으로 동작합니다. 모든 방을 청소하기 전에는 절대 쉬지 않습니다.
void CleaningHouse() {
// A방 청소
// B방 청소
// C방 청소
}
위 CleaningHouse() 메서드를 실행하면 처음부터 마지막 줄가지 중간에 멈추지 않고 처리가 진행됩니다. 따라서 A, B, C가 한 번에 모두 청소됩니다.
코루틴의 경우 집의 구역을 나누어 오늘은 어떤 구역을 청소하고 쉰 다음 내일은 남은 구역을 청소하는 방식입니다.
IEnumerator CleaningHouse() {
// A방 청소
yield return new WaitForSeconds(10f); //10초 쉬기
// B방 청소
yield return new WaitForSeconds(20f); //20초 쉬기
// C방 청소
}
코루틴 메서드는 StartCoroutine() 메서드로 실행합니다.
StartCoroutine(CleansingHouse());
코루틴의 문법
- 초 단위로 쉬기
yield return new WaitForSeconds(float time);
- 한 프레임만 쉬기
yield return null;
StartCoroutine() 메서드는 두 가지 방법으로 실행할 코루틴 메서드를 입력받습니다.
StartCoroutine(SomeCoroutine()); // 코루틴 메서드를 실행한 반환값
StartCoroutine("SomeCoroutine"); // 코루틴 메서드의 이름
코루틴 메서드를 실행하면서 그 반환값을 즉시 StartCoroutine()에 입력하는 방식은 다음과 같이 실행할 코루틴 메서드에 입력값을 직접 전달할 수 있습니다.
StartCoroutine(SomeCoroutine(100));
반면 코루틴 메서드의 이름을 StartCoroutine()에 문자열로 입력하고 코루틴을 실행하는 방식은 나중에 StopCoroutine() 메서드를 사용해 실행 중인 코루틴을 도중에 종료할 수 있습니다.
StopCoroutine("SomeCoroutine");
<참고>
레트로의 유니티 게임 프로그래밍 에센스