[Coroutine]
하단 링크들 참고하여 정리
Coroutine
: 서브루틴(subroutine)에서 일반화 된 개념으로 수행 일시 정지(suspending)을 위해 다수 entry points 를 허용하고 다른 시점에서 수행을 다시 진행(resume)할 수 있는 computer program component (1)
> 예) cooperative tasks, exceptions, event loop, iterators, infinite listsand pipes.
Coroutine 사용 방법
coroutine은 IEnumerator 리턴값을 가지고 yield 함수를 호출해야한다.
IEnumerator Fade() { for (float f = 1f; f >= 0; f -= 0.1f) { Color c = renderer.material.color; c.a = f; renderer.material.color = c; yield return; } }
아래 그림과 같이 코루틴은 자신을 호출한 함수에 데이터를 하나 넘겨주고 쉽니다. 받은 측에서는 데이터를 받고 나서 처리한 후에 코루틴에게 다음 데이터를 달라고 깨웁니다. 쉬고 있던 코루틴은 일어나서 다시 데이터를 전달하고.. 이를 계속 반복하는 구조로 동작합니다. 이러한 작업에 적절한 인터페이스가 IEnumerator 이며, C#에서 코루틴을 사용할 때는 이를 사용하여야 합니다.
일반적으로 호출한 함수에게 데이터를 전달할 때, return 구문을 사용하게 되면 데이터를 전달하고 함수는 종료됩니다. 코루틴은 이와 다르게 데이터를 전달한 후에 자신은 대기하고 있어야 하는데, 이를 위해 C#에서는 yield return이라는 키워드를 제공하고 있으며 이를 사용하면 됩니다. (4)
yield return ... ;
유니티 엔진과 interaction (4)
Coroutine 사용 시 (4)
- 순차적이거나 시간차를 통해 수행되어야 하는 루틴 작성 가능
- 다른 연산이 종료될 때 까지 wait 시킬 수 있음.
- 성능 상 이점
: coroutine 발생 시 unity engine는 다른 일을 처리하고 시간이 되면 코루틴을 실행하므로 wait polling 같은 상황을 발생시키지 않는다.
yield 구문 예
코루틴용 데이터
|
엔진이 수행하는 기능
|
yield return null
|
다음 프레임까지 대기
|
yield return new WaitForSeconds(float)
|
지정된 초 만큼 대기
|
yield return new WaitForFixedUpdate()
|
다음 물리 프레임까지 대기
|
yield return new WaitForEndOfFrame()
|
모든 렌더링작업이 끝날 때까지 대기
|
yield return StartCoRoutine(string)
|
다른 코루틴이 끝날 때까지 대기
|
yield return new WWW(string)
|
웹 통신 작업이 끝날 때까지 대기
|
yield return new AsyncOperation
|
비동기 작업이 끝날 때까지 대기 ( 씬로딩 )
|
Links
http://en.wikipedia.org/wiki/Coroutine
: (1) Coroutine
http://docs.unity3d.com/Documentation/Manual/Coroutines.html
: (2) Coroutines, Unity manual
http://unityindepth.tistory.com/entry/Coroutine
: (3) 코루틴(Coroutine)++ 개념
http://www.unitystudy.net/bbs/board.php?bo_table=writings&wr_id=43
: (4) [스크립팅] 코루틴(Coroutine)의 기본 개념 및 활용
http://www.gamedevforever.com/200
: (5) 유니티엔진의 coroutine & yield 1편. FSM의 습격
댓글 없음:
댓글 쓰기