[Unity3D] Coroutine
Unity- Delay 만들기
일정 주기마다 실행되는 함수를 만들고 싶을때, 다음과 같이 만들 수 있다.
1 2 3 4 5 6 7 8 9 10 11 | float accTime = 0; float delay = 1; void Update() { accTime += Time.deltaTime; if(accTime > delay) { func(); accTime = 0; } } |
이는 Update문 안에서 accTime을 매 프레임마다 더해주고 accTime과 delay를 비교해서 처리하게되는데 Coroutine을 사용하면 더 간단하고 좋은 성능으로 만들 수 있다.
1 2 3 4 5 6 | IEnumerator delay() { yield return new WaitForSeconds(1f); func(); StartCoroutine(delay()); } |
- Coroutine
일반 함수는 호출하면 반환값을 반환하기 전에 실행이 완료되어 시간의 경과와 함께 일련의 이벤트에는 사용할 수 없다. 이는 Coroutine을 사용하면 편리하게 구현할 수 있다.
Coroutine은 실행을 중지하여 Unity에 제어권을 돌려주고, 계속할 때는 다음 프레임에서 중지한 곳부터 실행을 계속할 수 있는 기능이다.
즉 Coroutine을 사용하면 시간을 두거나 순차적으로 기능을 실행할 때 매우 유용하다.
가장 기본적인 Coroutine함수는 다음과 같다.
1 2 3 4 5 6 | IEnumerator func() { // event. yield return null; // event2. } |
Coroutine은 StartCoroutine 함수를 사용하여 실행하며, IEnumerator 형식을 반환값으로 가지고 yield return 구문을 포함하고 있어야 한다.
yield return 구문에는 일정시간은 기다리는 new WaitForSeconds(float) 이 가장 많이 쓰이며 다른 Coroutine이 끝날 때가지 대기하거나 웹 통신 작업이 끝날 때까지 대기하는 등 다양한 구문이 있다.
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 |
비동기 작업이 끝날 때까지 대기(씬로딩) |
'Unity' 카테고리의 다른 글
[Unity] Spine 오브젝트에 Mask 적용하는 법 (0) | 2020.11.19 |
---|---|
[Unity3D] WWW객체로 Web에 있는 Image 불러오기 (0) | 2015.12.07 |
[Unity3D] 이동, 회전, 크기변경 정리 (5) | 2015.11.23 |
[Unity3D] GameObject 생성과 삭제. Instantiate와 Destroy (1) | 2015.11.23 |
[Unity3D] Prefab (0) | 2015.11.20 |