내일배움캠프 19일차 TIL <Unity Coroutine> 05/01

정광훈(Unity_9기)·2025년 5월 1일

TIL (Today I Learned)

목록 보기
30/101
post-thumbnail

코루틴(Coroutine)

Unity에서 시간 기반 작업이나 비동기적 작업을 처리하기 위해 사용되는 메서드

일반적인 함수와 달리,
코루틴은 실행을 중단하고 나중에 다시 실행을 재개할 수 있다.

특징

  1. 비동기적 작업

    • 프레임 단위로 나뉘어 실행되므로,
      한 프레임에 모든 작업을 처리하지 않아도 됩니다.

    • 게임이 멈추지 않고 연속적으로 작동할 수 있습니다.

  2. yield 키워드를 사용

    • yield return을 통해 특정 조건이나 시간을 기다렸다가 작업을 재개할 수 있다.

이번 강의에서 사용한 코루틴

yield return new WaitForSeconds(시간)
설명: 지정된 시간(초)만큼 대기

예시)

IEnumerator WaitForSecondsExample()
{
    Debug.Log("작업 시작");
    yield return new WaitForSeconds(2f); // 2초 대기
    Debug.Log("2초 후 작업 실행");
}

yield return null
설명: 다음 프레임까지 대기

다른 예시)

IEnumerator WaitForNextFrame()
{
    Debug.Log("현재 프레임");
    yield return null; // 다음 프레임까지 대기
    Debug.Log("다음 프레임에서 실행");
}

이런 식으로 사용 가능

public class EnemyManager : MonoBehaviour
{
    // Coroutine: 코루틴은 실행을 중단하고 나중에 다시 실행을 재개할 수 있다.
    // yield return을 통해 특정 조건이나 시간을 기다렸다가 작업을 재개할 수 있다.
    private Coroutine waveRoutine; // 현재 실행 중인 웨이브 코루틴
    
    // 현재 진행 중인 모든 웨이브 / 스폰을 중지
    public void StopWave()
    {
        StopAllCoroutines();
    }

    // 지정된 수 만큼 적을 생성하는 코루틴
    private IEnumerator SpawnWave(int waveCount)
    {
        enemySpawnComplite = false;
        yield return new 
        // 웨이브를 시작할 때 대기 / WaitForSeconds: 일정 시간 동안 대기
WaitForSeconds(timeBetweenWaves);
        for (int i = 0; i < waveCount; i++)
        {
            // 웨이브 간 대기 시간
            yield return new WaitForSeconds(timeBetweenSpawns);
            SpawnRandomEnemy(); // 시간 대기하는 동안 몬스터 생성
        }

        enemySpawnComplite = true;
    }

조건문이나 반복문으로 할 경우 코드가 복잡해지거나 에러가 날 수 있지만
코루틴을 사용하면 간단하게 내가 원하는 타이밍에 멈췄다가 시작하게 할 수 있다.

0개의 댓글