[Unity] 코루틴(Coroutine)으로 시간 지연시키기

Gee·2025년 2월 26일

코루틴(Coroutine)?

  • 코루틴은 유니티에서 특정 작업을 지연시키거나 반복적으로 실행할 때 사용되는 기능.
  • 시간 기반 작업, 비동기적 작업을 처리하기 위해 사용되는 메서드.
  • 일반적인 함수와 달리 코루틴은 실행을 중단하고 반환했다가 나중에 다시 실행을 재개할 수 있다.
  • 코루틴은 IEnumerator 타입의 메서드로 작성하고, StartCoroutine()을 사용해 실행한다.

IEnumerator

  • IEnumerator는 열거 가능한 객체를 반환하는 메서드.
  • 유니티에서 코루틴은 IEnumerator 타입의 메서드로 구현됨.
  • 중간에 yield return을 사용하여 실행을 잠시 멈추고, 지정된 시간이 지난 후 다시 실행을 재개할 수 있게 한다.

코루틴 예시 코드

// 일정 시간마다 HP 감소하는 코루틴
public IEnumerator TakePoisonDamage(int damage, int times, float interval)
{
    for (int i = 0; i < times; i++)
    {
        TakeDamage(damage); // 체력 감소
        Debug.Log($"독 데미지! 피해 {damage}, 현재 체력 {currentHealth}, 남은 횟수 {times - i - 1}번");
        yield return new WaitForSeconds(interval); // 일정 시간(interval) 대기
    }
}
  • 팀 프로젝트 진행 중, 플레이어가 독 아이템과 충돌했을 때 일정 시간마다 지속적으로 데미지를 주기 위해 작성한 코루틴.
  • for() : 주어진 횟수(times)만큼 반복함.
  • TakeDamage(damage): 체력을 damage만큼 감소시킴.
  • Debug.Log: 체력과 남은 독 데미지 횟수를 체크.
  • yield return new WaitForSeconds(interval) : 지정된 시간(interval)만큼 대기 후, 루프가 다음 반복으로 진행됨.

코루틴의 특징

  • yield return : 코루틴의 실행을 잠시 멈추고 지정된 조건이 만족될 때까지 대기함.
  • WaitForSeconds() : 지정된 시간만큼 대기하도록 해줌.
  • StartCoroutine() : 코루틴을 실행하는 메서드.
  • StartCoroutine(TakePoisonDamage(5, 3, 1f)) : 1초마다 5만큼의 독 데미지를 3번 주는 코루틴 실행.
  • IEnumerator : 코루틴 메서드가 반환하는 타입. 이 타입은 데이터를 순차적으로 처리할 수 있도록 해줌.
  • 이렇게 코루틴을 사용하면 여러 작업을 효율적으로, 또 비동기적으로 처리할 수 있어 게임 내 다양한 시간 기반 이벤트를 관리하는 데 매우 유용함.
  • 체력 감소, 애니메이션, 효과 등을 시간 지연을 두고 처리할 때 활용한다.
profile
...

0개의 댓글