반응형
Unity의 코루틴(Coroutine)은 메서드의 실행을 여러 프레임에 걸쳐 나누어 실행할 수 있도록 합니다. 코루틴에서 사용되는 yield return 구문은 다양한 반환 타입을 지원합니다. 아래는 코루틴에서 사용할 수 있는 주요 반환 타입들을 정리한 것입니다.
1. null
yield return null;
- 한 프레임 대기합니다.
- 다음 프레임에서 코루틴이 다시 실행됩니다.
2. WaitForSeconds
yield return new WaitForSeconds(2f);
- 지정한 시간(초)만큼 대기합니다.
- 예: 2초 동안 대기합니다.
3. WaitForSecondsRealtime
yield return new WaitForSecondsRealtime(2f);
- 실제 시간으로 지정한 시간만큼 대기합니다.
- Time.timeScale의 영향을 받지 않습니다.
4. WaitForEndOfFrame
yield return new WaitForEndOfFrame();
- 현재 프레임의 렌더링이 끝날 때까지 대기합니다.
- 그 다음 프레임에서 코루틴이 다시 실행됩니다.
5. WaitForFixedUpdate
yield return new WaitForFixedUpdate();
- 다음 물리 업데이트(FixedUpdate)까지 대기합니다.
- FixedUpdate는 고정된 시간 간격으로 호출됩니다.
6. CustomYieldInstruction
public class WaitForSecondsCustom : CustomYieldInstruction
{
private float waitTime;
public WaitForSecondsCustom(float time)
{
waitTime = Time.time + time;
}
public override bool keepWaiting
{
get { return Time.time < waitTime; }
}
}
// 사용 예:
yield return new WaitForSecondsCustom(2f);
- CustomYieldInstruction을 상속하여 사용자 정의 조건을 설정할 수 있습니다.
- keepWaiting 프로퍼티가 false를 반환할 때까지 대기합니다.
7. WaitUntil
yield return new WaitUntil(() => someCondition);
- 특정 조건이 true가 될 때까지 대기합니다.
- 조건은 델리게이트나 람다 표현식으로 전달됩니다.
8. WaitWhile
yield return new WaitWhile(() => someCondition);
- 특정 조건이 false가 될 때까지 대기합니다.
- 조건은 델리게이트나 람다 표현식으로 전달됩니다.
9. 다른 코루틴
yield return StartCoroutine(AnotherCoroutine());
- 다른 코루틴의 완료를 대기합니다.
- 예: StartCoroutine으로 시작된 다른 코루틴이 완료될 때까지 대기합니다.
10. AsyncOperation
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("YourSceneName");
yield return asyncLoad;
- 비동기 작업의 완료를 대기합니다.
- 예: 씬 로드, 애셋 번들 로드 등.
예제: 다양한 반환 타입 사용
using UnityEngine;
using UnityEngine.SceneManagement;
public class CoroutineExample : MonoBehaviour
{
void Start()
{
StartCoroutine(MyCoroutine());
}
IEnumerator MyCoroutine()
{
// 한 프레임 대기
yield return null;
// 2초 대기
yield return new WaitForSeconds(2f);
// 2초 실제 시간 대기
yield return new WaitForSecondsRealtime(2f);
// 현재 프레임의 렌더링 끝까지 대기
yield return new WaitForEndOfFrame();
// 다음 FixedUpdate까지 대기
yield return new WaitForFixedUpdate();
// 사용자 정의 대기
yield return new WaitForSecondsCustom(2f);
// 특정 조건이 true가 될 때까지 대기
yield return new WaitUntil(() => Time.time > 10f);
// 특정 조건이 false가 될 때까지 대기
yield return new WaitWhile(() => Time.time < 20f);
// 다른 코루틴 완료 대기
yield return StartCoroutine(AnotherCoroutine());
// 비동기 씬 로드 완료 대기
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("YourSceneName");
yield return asyncLoad;
Debug.Log("Coroutine complete");
}
IEnumerator AnotherCoroutine()
{
yield return new WaitForSeconds(1f);
Debug.Log("Another Coroutine complete");
}
}
결론
위에서 설명한 다양한 yield return 타입을 사용하면 코루틴을 통해 복잡한 비동기 작업을 쉽게 구현할 수 있습니다. 각 타입은 특정 상황에서 유용하게 사용될 수 있으며, 이를 적절히 조합하여 다양한 비동기 로직을 구현할 수 있습니다.
반응형
'Unity > Manual' 카테고리의 다른 글
Unity에서 Android 빌드 환경 설정하는 방법 단계별 가이드 (0) | 2024.07.06 |
---|---|
Unity에서 데이터 테이블 사용하기: 게임 개발의 효율성을 높이기 위한 방법 (0) | 2024.06.18 |
Unity 충돌체의 겹친 범위만큼 밀어내는 방법 (0) | 2024.06.15 |
Unity에서 오브젝트 및 컴포넌트 찾는 방법 총정리: GameObject, Find, Tag, Component (0) | 2024.06.14 |
Unity 반복적인 작업이나 지연을 처리하는 Coroutine : 게임 개발의 강력한 도구 (0) | 2024.06.14 |