2019년 11월 15일 금요일

unity - coroutine( 코루틴 )

[Unity] 유니티 코루틴 이해하기 (LUA coroutine 참고)


@유니티 코루틴 이해하기

Update() 함수에 제어문을 통해 함수를 호출하는 식으로 코딩할 경우,이미 사용됐거나 굳이 필요치 않은 기능들도 작업을 계속 수행해 연산이 낭비된다.
몇 초 후에 작업이 필요할 때 또는 특정 상황의 종료 후에 작업하려할 때Update() 함수를 통해 매 프레임마다 작업이 끝났는지 계속 확인해야 하기 때문이다.


*코루틴이란?

진입 지점이 여러개인 함수.  단일 쓰레드로 동작하는 유니티는 코루틴을 사용하므로써 멀티쓰레드를 흉내낼 수 있다.  일반적으로 함수가 호출되서 끝나는 서브루틴의 개념과 달리  yield return을 사용해 그 위치를 기억한 후 다음 호출 때 그곳부터 다시 실행할 수 있다.  그래서 여러개의 코루틴을 동작시키고 각기 다른 시점에 yield가 반환되도록 할 경우 마치 여러 개의 쓰레드가 동시에 동작하는 것과 같은 효과를 낸다.


*코루틴의 특징

문자열로 호출 가능while문을 이용해 무한 유지 가능yield 키워드를 통해 대기와 호출 조정 가능해당 게임 오브젝트가 비활성화되면 자동 소멸


*코루틴 시작 함수
StartCoroutine("문자열");StartCoroutine(함수이름);


*기본 구조
IEnumerator 함수이름(매개변수) { ... }


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


출처 : http://kukanuc.blogspot.com/2019/01/unity.html

댓글 없음:

댓글 쓰기