-
[TIL] 10주차 3일 ( Coroutine )개발일지/스파르타 코딩클럽 부트캠프 2024. 6. 19. 20:58
오늘은 코루틴에 대해서 알아보고 사용해보려고 한다.
먼저 코루틴의 개념에 대해서 알아보자
코루틴 ( Coroutine )
코루틴은 하나의 작업을 여러개의 프레임에 분산할 때 사용한다.
코루틴의 활용
- IEnumerator 리턴 타입의 함수에서 yield return을 사용하여 코루틴을 구현할 수 있다.
- StartCoroutine 함수를 통해서 코루틴을 시작할 수 있고, StopCoroutine 함수를 통해 코루틴을 중지할 수 있다.
- 코루틴은 프레임 간의 지연, 비동기 작업, 시간에 다른 애니메이션 등의 작업에 주로 사용된다.
- yield return null은 다음 프레임까지 대기를 의미하고, yield return new WaitForSeconds(n)은 n초 동안 대기를 의미한다. 중간에서 중단하려면 yield break를 사용할 수 있다.
- 코루틴은 별도의 스레드에서 실행되지 않는다. ( 단일 스레드 ) 따라서 Unity의 메인 스레드에서 안전하게 Unity API를 호출할 수 있다.
- 코루틴은 일반 함수와는 다르게, 실행을 일시 중단하고 나중에 다시 시작할 수 있어서, 시간 지연, 반복, 조건부 대기 등의 작업을 수행할 때 매우 유용하다.
왜 기다리는 작업이 필요할까??
1. 수 초간 진행되어야 하는 어떤 일 - for문 등에서 중간에 멈췄다 돌아오고 그런 행동이 가능
2. 어떠한 조건 - 턴제 등에서 30초가 지날 때 까지 상대턴인 상황 등
3. 웹 호출 - 이미지를 요청하고 바로 실행되면 null이 뜰 수 있어서 기다렸다가 호출하는 등
예를 들어서 투명하게 만들고싶은 게임오브젝트가 있는데
void Fade() { Color c = spriteRenderer.color; for (float alpha = 1f; alpha >= 0; alpha -= 0.1f) { c.a = alpha; spriteRenderer.color = c; } } void Start() { Fade(); }
위와 같이 작성하면 사용자가 원하는 Fade 효과가 나타날까?
그렇지않다. 순식간에 줄어들어 결국 알파가 0인 경우만 나타나게 될 것이다.
이 경우 코루틴을 사용하여 유니티에서 비동기적인 작업을 수행할 수 있게 해준다.
코루틴은 함수의 실행을 일시 중지하고, 이후에 다시 재개할 수 있는 기능을 제공한다.
yield return을 만나면 서버로 잠시 가있는 느낌
using UnityEngine; using System.Collections; public class CoroutineExample : MonoBehaviour { IEnumerator Start() { while (true) { Debug.Log("Hello, World!"); yield return new WaitForSeconds(1f); } } }
예를 들어 위의 코드는 1초마다 Hello, World! 를 출력하는
'개발일지 > 스파르타 코딩클럽 부트캠프' 카테고리의 다른 글
[TIL] 10주차 5일 ( 유니티에 관한 꿀팁 (심연)) (0) 2024.06.21 [TIL] 10주차 4일 ( 옵저버패턴 , 캐릭터 스텟 강화 ) (0) 2024.06.20 [TIL] 10주차 2일 Delegate (4) 2024.06.18 [TIL] 10주차 1일 ( UGUI ) (0) 2024.06.17 [TIL] 9주차 5일 개인과제 진행 ( Coroutine ) (0) 2024.06.14