📌 Coroutine이란?
**코루틴(Coroutine)**은 Unity에서 제공하는 특별한 함수로, 작업의 흐름을 중간에 일시정지하고, 조건이 충족되면 다시 이어서 실행할 수 있다.
코루틴은 IEnumerator 반환형을 가지며, StartCoroutine() 함수를 통해 실행된다.
IEnumerator ExampleCoroutine()
{
Debug.Log("1초 대기 전");
yield return new WaitForSeconds(1f);
Debug.Log("1초 대기 후");
}
StartCoroutine(ExampleCoroutine());
⚙️ Coroutine 실행 흐름
코루틴은 Update() 함수가 끝난 뒤 실행된다.
즉, 모든 Update() 함수가 호출된 이후, 코루틴이 yield return한 지점부터 재개된다.
⏱️ 다양한 YieldInstruction 종류
YieldInstruction | 설명 |
yield return null | 다음 프레임까지 대기 후 이어서 실행 |
yield return new WaitForSeconds(x) | x초 후에 이어서 실행 |
yield return new WaitForFixedUpdate() | 모든 FixedUpdate() 이후에 실행됨 |
yield return new WaitUntil(() => condition) | 주어진 조건이 true가 될 때까지 대기 |
yield return new WaitWhile(() => condition) | 주어진 조건이 false가 될 때까지 대기 |
yield return www | WWW 요청(웹 요청)이 완료될 때까지 대기 (UnityWebRequest 권장) |
yield return StartCoroutine(Other()) | 다른 코루틴이 완료될 때까지 대기 |
🔁 Coroutine 중단 및 종료
- 중단: StopCoroutine("함수이름"), StopCoroutine(코루틴변수)
- 모든 코루틴 종료: StopAllCoroutines()
Coroutine myRoutine;
void Start()
{
myRoutine = StartCoroutine(MyCo());
}
void StopIt()
{
StopCoroutine(myRoutine);
}
여기서 주의할점은 코루틴을 변수로 사용하지 않는다면 StopCoroutine을해도 멈추지 않는다 왜냐하면 다른 인스턴스를 참조하기 때문이다!!
✅ 언제 Coroutine을 사용해야 할까?
사용 | 사례설명 |
연출 처리 | 화면 전환, 효과 타이밍, 대기 후 실행 등 |
시간 기반 반복 | 일정 시간 간격으로 동작 반복 (예: 총알 발사 쿨타임) |
조건 대기 | 어떤 조건을 만족할 때까지 기다리는 처리 |
비동기 작업 | 웹 요청, 파일 로딩 등 완료까지 시간이 걸리는 작업 |
🧠 주의할 점
- yield return new WaitForSeconds()는 Time.timeScale의 영향을 받는다. (0이면 멈춤)
- MonoBehaviour가 비활성화되면 코루틴도 멈춘다.
- 코루틴 내에서 무한 루프를 만들면 게임이 멈출 수 있다.
🧪 예시: 간단한 반복 공격
IEnumerator AutoAttack()
{
while (true)
{
Attack();
yield return new WaitForSeconds(1f); // 1초마다 공격
}
}
🏁 마무리
코루틴은 Unity 개발에서 시간을 다루는 가장 강력한 도구 중 하나이다.
처음엔 Update()보다 복잡하게 느껴질 수 있지만, 익숙해지면 타이밍 제어, 연출 구현, 대기 처리에 매우 유용하다.
흠..원래 개발할때 코루틴을 많이 썼었는데 인보크도 많이 사용하는 듯 하다 인보크와 코루틴 비교하는 글도 한번 작성해 봐야겠다.
'Unity' 카테고리의 다른 글
Unity - Unity Instantiate() 오버로드 정리 & 자식으로 설정할 때의 차이 (0) | 2025.07.28 |
---|---|
Unity - Invoke() vs Coroutine 비교 정리 & InvokeRepeating() (1) | 2025.07.28 |
Unity - Unity MonoBehaviour 생명주기 (Lifecycle) 정리 (2) | 2025.07.28 |
Unity - Collider2D의 Layer Overrides(Include Layers, Exclude Layers) 알아보기 (0) | 2025.07.25 |
Unity - 2D TopDown에서 캐릭터와 무기의 회전 및 Flip 처리 정리 (1) | 2025.07.23 |