Upload
sangwook-kwon
View
993
Download
2
Embed Size (px)
Citation preview
Coroutine
<코루틴 함수 구문>
IEnumerator 함수 이름 ( 인자 )
<코루틴 리턴 구문>
yield return null; (다음 프레임까지 대기)yield return new WaitForSeconds(float); (지정된 초 만큰 대기)yield return new WaitForFixedUpdate(); (다음 물리 프레임까지 대기)yield return new WaitForEndOfFrame(); (모든 랜더링 작업이 완료시까지 대기)yield return new StartCoRoutine(string);(다른 코루틴이 끝날 때까지 대기)yield return new www(string);(웹 통신 작업이 끝날 때까지 대기)yield return new AsyncOperation; (비동기 작업이 끝날 때까지 대기(씬로딩))
Coroutine
Corouinte 은 게임로직의 분산 처리가 가능하여 유용하다. (성능 향상)
<단점>
함수형으로 선언하지만, 로직 수행 결과 값을 반환할 수 없다.
Coroutine 로직 수행 중에 Error Handling이 되지 않는다. (try & catch)
Coroutine 로직 수행 중 취소가 되지 않는다.( StopCoroutine은 강제 종료 )
<단점 보완>C# Extention Method 기능을 통해서 새로운 Extentions Coroutine을 구성한다.
<장점>
주의 : 실제 비동기 방식은 아니다. 멀티쓰레드 개념은 버려라.
Coroutine
<Extension Method>MonoBehaviour를 확장하여, 새로운 StartCoroutine 함수를 구성.(예: Cortouine<int> testCo = StartCoroutine<int>( “coroutine 함수” );
Coroutine
isCancelled == true 이면Routine 종료
다음 Coroutine을 수행하고, 수행 중 예외사항을Catch 한다.
Coroutine의 현재 yield 오브젝트를 T type으로 리턴값을 가져온다.Current는 “yield return X” 형식에서 X를 가지고 있다. (예: yield return null 일 경우Current는 null)
Coroutine
Coroutine 은 MonoBehaviour 을 상속받은 모든 컴포넌트에서 수행이 가능하다.
여러곳에서 사용하게 되면 수행 순서 및 로직의 결과를 보장하기 어렵게 된다.
싱글톤 클래스를 통해서 Coroutine 수행을 일괄 관리 하도록 할 수 있다.
JobManager : (MonoBehaviour 상속 싱글톤 클래스)
Job : (IEnumerator 함수를 가진 클래스)Job : (IEnumerator 함수를 가진 클래스)Job : (IEnumerator 함수를 가진 클래스)Job : (IEnumerator 함수를 가진 클래스)
IEnumerator 함수를 싱클톤 클래스에 넘겨서 수행하게 한다.
Coroutine
JobManager 싱글톤 객체에서StartCoroutine 수행
Coroutine loop를 수행. Child job 까지 관리 한다.
Job의 일시 정지 및 수행순서를 보장 받을 수 있다.
Job 수행 결과 Callback