2014년 3월 12일 수요일

Unity script - coroutine

Unity script 사용 관련 된 내용들을 정리함.


[Coroutine]

하단 링크들 참고하여 정리

Coroutine
 : 서브루틴(subroutine)에서 일반화 된 개념으로 수행 일시 정지(suspending)을 위해 다수 entry points 를 허용하고 다른 시점에서 수행을 다시 진행(resume)할 수 있는 computer program component (1)
  > 예)  cooperative tasksexceptionsevent loopiteratorsinfinite 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;
 }
}

CoRoutine1.png

 아래 그림과 같이 코루틴은 자신을 호출한 함수에 데이터를 하나 넘겨주고 쉽니다. 받은 측에서는 데이터를 받고 나서 처리한 후에 코루틴에게 다음 데이터를 달라고 깨웁니다. 쉬고 있던 코루틴은 일어나서 다시 데이터를 전달하고.. 이를 계속 반복하는 구조로 동작합니다. 이러한 작업에 적절한 인터페이스가 IEnumerator 이며, C#에서 코루틴을 사용할 때는 이를 사용하여야 합니다.
일반적으로 호출한 함수에게 데이터를 전달할 때, return 구문을 사용하게 되면 데이터를 전달하고 함수는 종료됩니다. 코루틴은 이와 다르게 데이터를 전달한 후에 자신은 대기하고 있어야 하는데, 이를 위해 C#에서는 yield return이라는 키워드를 제공하고 있으며 이를 사용하면 됩니다. (4)

yield return ... ;

유니티 엔진과 interaction (4)

CoRoutine3.png


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의 습격


댓글 없음:

댓글 쓰기