반응형

 

 

 

"코루틴(Coroutine)"

 

 

Unity에서는 서버 응답을 기다리거나, 리소스를 로딩하거나, 

연출을 위해 몇 초 뒤에 다음 동작을 이어가는 등 프레임을 멈추지 않으면서 흐름을 제어해야 하는 경우가 자주 생긴다.

 


이럴 때 코루틴은 스레드를 추가하지 않고도, 

코드를 중간에 멈췄다가(yield) 조건이 만족되면 다시 이어서(resume) 실행할 수 있도록 해주는 대표적인 방법이다.

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

1) 코루틴(Coroutine)이란?

 

코루틴은 병렬 처리라기보다, 한 작업을 여러 단계로 나눠 프레임 사이에 분산시키는 느낌에 가깝다.

 

 

 

yield return null; → 다음 프레임에 이어서 실행

yield return new WaitForSeconds(1f); → 1초 뒤에 이어서 실행

yield return new WaitUntil(()=>cond); → 조건이 true가 되면 이어서 실행

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

2) Unity 코루틴은 “스레드”가 아니다?

 

Unity 코루틴은 대부분 메인 스레드에서 진행된다,
따라서 코루틴을 쓴다고 해서 자동으로 멀티스레드/병렬화가 되지는 않는다.

 

 

즉, Unity 엔진IEnumerator를 등록해두고,

프레임마다 진행 가능한 코루틴만 한 단계씩 진행시킨다.

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

3) 코루틴 기본 문법 예시 코드

(IEnumerator + StartCoroutine)

 

using System.Collections;
using UnityEngine;

public class CoroutineEx : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(Example());
    }

    private IEnumerator Example()
    {
        Debug.Log("A");
        
        yield return null; // 다음 프레임
        Debug.Log("B");

        yield return new WaitForSeconds(1f); // 1초 대기
        Debug.Log("C");
    }
}

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 


4) 자주 쓰는 yield 예시 코드

 


(1) 다음 프레임까지 대기

yield return null;

 


(2) x초 대기(게임 시간 기준)

yield return new WaitForSeconds(xf);

 


(3) 실제 시간 기준 x초 대기(Time.timeScale 무시)

yield return new WaitForSecondsRealtime(xf);

 

 

(4) 조건 충족까지 대기

yield return new WaitUntil(() => isLoaded);



 

(5) 시퀀스 구성(다른 코루틴이 끝날 때까지 기다림)

yield return StartCoroutine(FadeOut());
yield return StartCoroutine(LoadScene());
yield return StartCoroutine(FadeIn());

 

 

+++

 

waitForSecounds와 waitForSecoundsRealtime 차이 및 사용기준



 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

5) 코루틴은 언제 멈추는가?

 

코루틴은 자동으로 멈추는 조건이 있는데

GameObject비활성(activeSelf=false)이 되거나
MonoBehaviourDestroy로 파괴되면 코루틴이 중단된다.

 

단, 스크립트만 비활성(Behaviour.enabled=false) 하는 것은 코루틴을 자동 중단시키지 않는다.
(OnDisable/OnDestroy에서 명시적으로 정리하는 것이 안전하다)

 


----------------------------------------------------------------------------------------------------------------------------------------------------------------


6) 오늘의 한 줄 요약

 

코루틴은 yield로 실행 흐름을 잠시 멈추고, 

대기조건이 충족되면 이어서 실행하는 IEnumerator 기반의 흐름 제어 방식이다. 

 

 

 

반응형

+ Recent posts