대부분의 경우 메서드를 호출하면 실행을 완료한 뒤 호출한 메서드에 제어와 선택적 반환값을 리턴해야 한다.
즉, 메서드 내에서 발생한 모든 행동은 단일 프레임 업데이트 내에서 발생해야 한다.
->코루틴을 사용하면 작업을 다수의 프레임에 분산할 수 있다.
유니티에서 코루틴은 실행을 일시 정지하고 제어를 유니티에 반환하지만 중단한 부분에서 다음 프레임을 계속할 수 있는 메서드이다.
IEnumerator Routine()
{
Debug.Log(0);
yield return new WaitForSeconds(1f);
Debug.Log(1);
yield return new WaitForSeconds(1f);
Debug.Log(2);
yield return new WaitForSeconds(1f);
Debug.Log(3);
yield return new WaitForSeconds(1f);
Debug.Log(4);
yield return new WaitForSeconds(1f);
Debug.Log(5);
}
//코루틴 변수
//코루틴을 관리하는 객체를 참조하는 변수
Coroutine coroutine;
private void OnEnable()
{
coroutine = StartCoroutine(Routine());
}
private void OnDisable()
{
StopCoroutine(coroutine);
StopAllCoroutines();
}
IEnumerator CoroutineWait()
{
yield return null; //한 프레임 지연
yield return new WaitForSeconds(1f);//n초간 시간을 지연
yield return new WaitForSecondsRealtime(1f);//현실 n초간 시간 지연
yield return new WaitForFixedUpdate(); //FixedUpdate 까지 지연
yield return new WaitForEndOfFrame();//프레임의 끝까지 지연
yield return new WaitUntil(() => true); //조건이 충족될때까지 지연
}
어디에 쓰는지?
예를 들면 특정 시간이 지난 후에 효과를 적용하거나, 복잡한 애니메이션을 관리하거나, 대기시간을 처리할 때 사용할 수 있다.반복적이고 지연된 작업을 처리할 때 유용하다.
하지만 남발하면 성능 문제가 일어날 수 있기 때문에 적재적소에 사용해보자.
'Unity' 카테고리의 다른 글
Unity 커맨드 스킬 구현 (0) | 2024.04.25 |
---|---|
Unity 2D 프로젝트(2주) (0) | 2024.04.25 |
Unity 게임 오브젝트 (0) | 2024.04.01 |