이전 글에서는 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 에 대해 자세히 알아보겠습니다!
'C#' 카테고리의 다른 글
6. yield return 에 대해 ( Coroutine 을 중지하고자 할 때 ) (0) | 2025.03.09 |
---|---|
5. yield return 에 대해 ( 활용 02 ) (0) | 2025.03.09 |
3. yield return 에 대해 (유니티에서의 동작) (0) | 2025.03.09 |
2. yield return 에 대해 (내부 동작) (0) | 2025.03.09 |
1. yield return 에 대해 (개념) (0) | 2025.03.09 |