반응형
게임을 개발하다 보면, 어떤 동작을 몇 초 후에 실행하거나, 특정 조건이 만족될 때까지 기다리거나, 프레임마다 반복 실행해야 하는 상황이 자주 생깁니다.
이럴 때 유용한 기능이 바로 Unity의 Coroutine(코루틴) 입니다.
Coroutine이란?
Coroutine은 Unity에서 비동기 처리를 가능하게 해주는 C# 기반의 유니티 전용 기능입니다.
일반적인 C# 함수는 동기적으로 실행되지만, Coroutine은 일시 정지/재개가 가능한 함수로, 시간 기반 흐름을 직접 제어할 수 있습니다.
Coroutine 기본 구조
IEnumerator WaitAndPrint()
{
Debug.Log("시작");
yield return new WaitForSeconds(2f);
Debug.Log("2초 후 실행");
}
// 호출 방식
StartCoroutine(WaitAndPrint());
- IEnumerator 반환형을 사용해야 함
- yield return으로 흐름을 멈추고 특정 조건까지 대기
- StartCoroutine()으로 실행
Unity 게임에서 자주 쓰이는 예시
상황 : 공격 쿨타임
설명 : 일정 시간 대기 후 다시 공격 가능
IEnumerator AttackCooldown()
{
canAttack = false;
yield return new WaitForSeconds(1.5f);
canAttack = true;
}
자주 쓰이는 yield return 종류
- new WaitForSeconds(t): t초 대기
- null: 다음 프레임까지 대기
- new WaitUntil(() => 조건): 조건이 참이 될 때까지 대기
- new WaitWhile(() => 조건): 조건이 거짓이 될 때까지 대기
Coroutine 중단하기
Coroutine routine;
void Start()
{
routine = StartCoroutine(DoSomething());
}
void StopEarly()
{
StopCoroutine(routine); // 중단
}
- 특정 코루틴만 중단: StopCoroutine()
- 전체 중단: StopAllCoroutines()
정리
- Coroutine은 Unity에서 시간 기반 제어나 반복 동작을 위해 반드시 필요한 기능
- 일반적인 함수로는 불가능한 "일시 정지 + 재개" 흐름이 가능
- 게임 내에서 연출, 타이밍, 비동기 처리를 매끄럽게 구현할 수 있음
728x90
반응형
'Unity > C# 학습' 카테고리의 다른 글
| Unity 생명주기 함수 정리 : Update vs FixedUpdate vs LateUpdate (1) | 2025.08.06 |
|---|---|
| Unity C#에서 Delegate와 Event 차이점 (2) | 2025.08.03 |
| 클래스(class)와 구조체(struct)의 차이점 (1) | 2025.07.17 |
| 값 타입(Value Type)과 참조 타입(Reference Type) 차이 (0) | 2025.07.16 |