6
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; (비동기 작업이 끝날 때까지 대기(씬로딩))

유니티3D coroutine 활용

Embed Size (px)

Citation preview

Page 1: 유니티3D coroutine 활용

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; (비동기 작업이 끝날 때까지 대기(씬로딩))

Page 2: 유니티3D coroutine 활용

Coroutine

Corouinte 은 게임로직의 분산 처리가 가능하여 유용하다. (성능 향상)

<단점>

함수형으로 선언하지만, 로직 수행 결과 값을 반환할 수 없다.

Coroutine 로직 수행 중에 Error Handling이 되지 않는다. (try & catch)

Coroutine 로직 수행 중 취소가 되지 않는다.( StopCoroutine은 강제 종료 )

<단점 보완>C# Extention Method 기능을 통해서 새로운 Extentions Coroutine을 구성한다.

<장점>

주의 : 실제 비동기 방식은 아니다. 멀티쓰레드 개념은 버려라.

Page 3: 유니티3D coroutine 활용

Coroutine

<Extension Method>MonoBehaviour를 확장하여, 새로운 StartCoroutine 함수를 구성.(예: Cortouine<int> testCo = StartCoroutine<int>( “coroutine 함수” );

Page 4: 유니티3D coroutine 활용

Coroutine

isCancelled == true 이면Routine 종료

다음 Coroutine을 수행하고, 수행 중 예외사항을Catch 한다.

Coroutine의 현재 yield 오브젝트를 T type으로 리턴값을 가져온다.Current는 “yield return X” 형식에서 X를 가지고 있다. (예: yield return null 일 경우Current는 null)

Page 5: 유니티3D coroutine 활용

Coroutine

Coroutine 은 MonoBehaviour 을 상속받은 모든 컴포넌트에서 수행이 가능하다.

여러곳에서 사용하게 되면 수행 순서 및 로직의 결과를 보장하기 어렵게 된다.

싱글톤 클래스를 통해서 Coroutine 수행을 일괄 관리 하도록 할 수 있다.

JobManager : (MonoBehaviour 상속 싱글톤 클래스)

Job : (IEnumerator 함수를 가진 클래스)Job : (IEnumerator 함수를 가진 클래스)Job : (IEnumerator 함수를 가진 클래스)Job : (IEnumerator 함수를 가진 클래스)

IEnumerator 함수를 싱클톤 클래스에 넘겨서 수행하게 한다.

Page 6: 유니티3D coroutine 활용

Coroutine

JobManager 싱글톤 객체에서StartCoroutine 수행

Coroutine loop를 수행. Child job 까지 관리 한다.

Job의 일시 정지 및 수행순서를 보장 받을 수 있다.

Job 수행 결과 Callback