공부/개념 & 유용한 내용

C# - 코루틴 & yield

ENUM01 2020. 6. 15. 17:04

코루틴이란?

어떠한 작업을 처리할 때 시간 간격을 두고 처리할 수 있도록 도와주는 함수 형식.

 

Ex.게임에서 어떤 아이템을 사용하면 버프를 받을 수 있다고 생각해보자.

이 때 Update(매 프레임 호출) , FixedUpdate(1초당 정해진 횟수 호출(50,40회 등))에서

버프의 유무를 확인한다면 모든 프레임에 if문으로 조건을 확인하게 될 것이다.

코루틴에서는 이런 경우를 간단히 처리할 수 있다.

아이템 효과가 10초라면 , 그 효과를 가지고 있는 코루틴 함수를 실행시키고,

그 코루틴 함수에서는 10초 후 버프를 종료시키면 된다.

 

yield return

yield return에는 object 타입의 값을 전달하는 역할을 한다.
메서드의 실행 도중에 yield return object에 도달하면 작동하는 순서는 아래와 같다.

1. IEnumerator 객체의 Current 값에 해당 object를 대입한다.
2. 코루틴 메서드의 실행이 일시 정지된다.
3. 엔진에서 Current에 있는 object 값을 가져온다.
4. object의 타입을 체크한 다음, 상황을 판단한다. 만약 object가 WaitForSeconds라면 엔진에서 해당 seconds까지 기다린다.
5. 호출자(유니티 엔진)가 다음 루틴을 실행해도 좋다고 판단했을 경우 MoveNext를 통해 다음 yield 구문을 향해 넘어간다. 만약 다음 yield 구문이 존재하지 않으면 코루틴을 종료한다.

엔진에서 MoveNext 메서드를 호출하면 흐름은 다시 코루틴 내부로 넘어가게 되고, 일시 정지됐던 루틴을 다시 실행하는 것이다.

 

 

참고 블로그

https://prosto.tistory.com/68

https://m.blog.naver.com/dlwhdgur20/221016139917