Unity) Coroutine이란
Coroutine
은 유니티에서 비동기적인 작업을 수행할 때 사용하는 중요한 기능이다.
특정 코드의 실행을 일시 중지했다가 이후 다시 재개할 수 있는 아주 신기한 기능이다.
시간이 걸리는 작업(대기, 애니메이션, 네트워크 요청 등)을 효율적으로 처리할 수 있다고한다.
코루틴의 역할
유니티에서는 기본적으로 Update()
메서드가 프레임마다 실행된다.
하지만 특정 시간 동안 기다렸다 코드를 실행하려면 Coroutine
이 필요하다.
- 프레임 단위로 코드 실행 지연
- 특정 조건이 만족될 때까지 대기
- 비동기적 실행(파일 읽기, 네트워크 요청 등)
- 애니메이션이나 이펙트 동기화
코루틴의 기본 구조
Coroutine
을 사용하려면 반환값이 IEnumerator
인 메서드를 만들고, StartCoroutine()
을 사용해 실행한다.
using System.Collections;
using UnityEngine;
public class CoroutineExample : MonoBehaviour
{
void Start()
{
// 코루틴 실행
StartCoroutine(MyCoroutine());
}
IEnumerator MyCoroutine()
{
Debug.Log("코루틴 시작");
// 2초 동안 대기
yield return new WaitForSeconds(2f);
Debug.Log("2초 후 실행됨");
}
}
코루틴의 종류 (yield return
키워드)
코루틴 내부에서 yield return
을 사용하면 특정 조건을 만족할 때까지 대기할 수 있다.
WaitForSeconds
- 일정 시간 대기
yield return new WaitForSeconds(3f); // 3초 동안 대기
- 게임 오브젝트를 3초 후에 활성화하는 등 다양한 연출에 사용
WaitForEndOfFrame
- 프레임 끝까지 대기
yield return new WaitForEndOfFrame();
- 모든 렌더링이 끝난 후 실행. UI 업데이트 후 실행할 때 유용
WaitForFixedUpdate
- 다음 FixedUpdate까지 대기
yield return new WaitForFixedUpdate();
- 물리 연산(Physics)과 관련된 코드에서 사용 (예: Rigidbody 움직임)
WaitUntil
- 특정 조건이 참이 될 때까지 대기
yield return new WaitUntil(() => someCondition == true);
- 특정 조건이 충족될 때까지 대기할 때 사용
WaitWhile
- 특정 조건이 거짓이 될 때까지 대기
yield return new WaitWhile(() => someCondition == true);
- 특정 조건이 계속 참인 동안 대기
null
- 다음 프레임까지 대기
yield return null;
- 현재 프레임이 끝나고 다음 프레임에서 다시 실행
코루틴을 제어하는 방법
StopCoroutine()
- 특정 코루틴 중지
StopCoroutine(MyCoroutine());
- 특정 코루틴만 중지
StopAllCoroutines()
- 모든 코루틴 중지
StopAllCoroutines();
- 해당 오브젝트에서 실행 중인 모든 코루틴을 중지합니다.
yield break;
- 현재 코루틴 강제 종료
IEnumerator ExampleCoroutine()
{
Debug.Log("시작");
yield return new WaitForSeconds(1f);
Debug.Log("중단됨");
yield break; // 코루틴 종료
Debug.Log("이 코드는 실행되지 않음");
}
코루틴과 같이 사용하면 좋은 키워드
키워드 | 설명 |
---|---|
StartCoroutine() |
코루틴 실행 |
StopCoroutine() |
특정 코루틴 종료 |
StopAllCoroutines() |
모든 코루틴 종료 |
yield return null |
다음 프레임까지 대기 |
yield return new WaitForSeconds(x) |
x초 동안 대기 |
yield return new WaitUntil(() => 조건) |
특정 조건이 참이 될 때까지 대기 |
yield return new WaitWhile(() => 조건) |
특정 조건이 거짓이 될 때까지 대기 |
yield break; |
현재 코루틴 즉시 종료 |
코루틴 주의할 점
Coroutine
은 반드시MonoBehaviour
에서 실행해야 한다Coroutine
실행 후StopCoroutine()
또는StopAllCoroutines()
으로 종료 가능- 무한 루프를 방지하기 위해
while
문을 사용할 때는yield return
필수 Coroutine
은 비동기 실행되므로 타이밍 이슈를 고려해야 한다.
댓글남기기