
코루틴(Coroutine)
Unity에서 시간 기반 작업이나 비동기적 작업을 처리하기 위해 사용되는 메서드
일반적인 함수와 달리,
코루틴은 실행을 중단하고 나중에 다시 실행을 재개할 수 있다.
비동기적 작업
프레임 단위로 나뉘어 실행되므로,
한 프레임에 모든 작업을 처리하지 않아도 됩니다.
게임이 멈추지 않고 연속적으로 작동할 수 있습니다.
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;
}
조건문이나 반복문으로 할 경우 코드가 복잡해지거나 에러가 날 수 있지만
코루틴을 사용하면 간단하게 내가 원하는 타이밍에 멈췄다가 시작하게 할 수 있다.