클라분들과 협업하면서 얘기가 나오는 것 중 가장 많이 나오는 것이 코루틴인데, 나는 노드 서버기수이지만 클라이언트도 알면 좋을 것 같아 알아보았다.
코루틴은 유니티에서 비동기적 작업을 수행할 수 있게 해주는 기능이다. 반복적으로 수행되어야할 때 효율적으로 처리하는데 도움을 준다. 예를 들어 애니메이션, 네트워크 요청등 시간 간격을 두고 발생하는 이벤트를 코루틴을 통해 쉽게 구현할 수 있다.
코루틴은 IEnumerator를 반환하는 메서드로 정의되는데 호출된 후 즉시 실행되지 않고 특정 조건이 충족될 때 실행을 중단 및 재개할 수 있다.
public class CoroutineEx : MonoBehaviour
{
void Start()
{
StartCoroutine(KkCoroutine());
}
IEnumerator KkCoroutine()
{
Debug.Log("코루틴 시작");
yield return new WaitForSeconds(2); // 2초 대기
Debug.Log("2초 후 실행");
yield return null; // 다음 프레임까지 대기
Debug.Log("코루틴 종료");
}
}
코루틴은 StartCoroutine
메서드를 이용하여 사용할 수 있다.
yield return
은 코루틴 실행을 중단하고 이후 조건에 따라 재개할 수 있다.
yield return null
: 다음 프레임까지 대기.yield return new WaitForSeconds(float seconds)
: 지정된 시간 동안 대기.yield return StartCoroutine(...)
: 다른 코루틴이 완료될 때까지 대기.yield return new WaitUntil(Func<bool>)
: 특정 조건이 참이 될 때까지 대기.ield return new WaitWhile(Func<bool>)
: 특정 조건이 거짓이 될 때까지 대기.start로 시작했으니 종료는 stop이다 StopCoroutine
void StopKkCoroutine()
{
if (KkCoroutine != null)
{
StopCoroutine(KkCoroutine);
}
}