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");

 

 

 

 

 

<참고>

레트로의 유니티 게임 프로그래밍 에센스