본문 바로가기
C#

4. yield return 에 대해 ( 활용 01 )

by Oz Driver 2025. 3. 9.

이전 글에서는 yield return이 Unity에서 StartCoroutine()을 통해 어떻게 실행되는지 살펴보았습니다. 이번 글에서는 yield return 을 활용하여 실제 게임에서 자주 사용되는 패턴을 구현해보겠습니다.

 

 

yield return을 활용한 애니메이션 제어

yield return을 사용하면 특정 시간 간격으로 실행되는 애니메이션을 쉽게 만들 수 있습니다. 예를 들어, 일정 간격으로 오브젝트의 위치를 변경하는 간단한 애니메이션을 만들어 보겠습니다.

IEnumerator MoveObject(Transform obj, Vector3 target, float duration)
{
    Vector3 s = obj.position;
    float t = 0f;
    
    while (t < duration)
    {
        obj.position = Vector3.Lerp(s, target, t / duration);
        t += Time.deltaTime;
        yield return null;
    }
    
    obj.position = target;
}

 

이 코루틴을 실행하면 obj 가 시작지점 s 에서 목적지점 target 위치 까지 duration 동안 시간 t 에 대한 보간을 하면서 이동합니다. yield return null;을 사용하여 매 프레임 실행되도록 만들었습니다.

 

 

yield return 을 활용한 이벤트 대기

특정 이벤트가 발생할 때까지 대기하는 기능도 yield return을 통해 쉽게 구현할 수 있습니다. 예를 들어, 플레이어가 특정 키를 누를 때까지 기다리는 코루틴을 만들어보겠습니다.

IEnumerator WaitForKeyPress(KeyCode key)
{
    while (!Input.GetKeyDown(key))
    {
        yield return null;
    }
    
    Debug.Log("키가 눌렸습니다: " + key);
}

 

이 코루틴은 사용자가 특정 키를 누를 때까지 while 루프를 계속 돌며, yield return null;을 사용하여 매 프레임 실행을 확인합니다. 키가 눌리면 Debug.Log()를 실행하고 종료됩니다.

 

 

yield return 을 활용한 타이머 기능

게임에서는 일정 시간 후에 특정 동작을 실행하는 기능이 필요할 때가 많습니다. 이를 yield return을 이용해 쉽게 구현할 수 있습니다.

IEnumerator StartTimer(float seconds)
{
    Debug.Log("타이머 시작: " + seconds + "초");
    yield return new WaitForSeconds(seconds);
    Debug.Log("타이머 종료!");
}

 

이 코루틴을 실행하면 설정된 시간 동안 대기한 후 특정 작업을 실행할 수 있습니다. WaitForSeconds를 사용하여 간단하게 구현할 수 있습니다.

 

 

마무리

yield return null;을 사용하면 매 프레임 실행되는 애니메이션 효과를 쉽게 구현할 수 있습니다.

while 루프와 yield return을 조합하면 특정 이벤트가 발생할 때까지 기다리는 기능을 구현할 수 있습니다.

WaitForSeconds를 활용하면 일정 시간 후에 실행되는 타이머 기능을 쉽게 만들 수 있습니다.

 

이번 글에서는 yield return을 활용한 다양한 실전 예제를 다뤘습니다.

다음 글에서는 코루틴을 멈추는 방법 StopCoroutine() 과 yield break 에 대해 자세히 알아보겠습니다!