본문으로 건너뛰기
Unity C# 기초집LESSON 18

Coroutine

난이도초급
예상 시간45분
선수지식17강 이벤트

18강. Coroutine

1. 이번 강의에서 해결할 문제​

Update에서 누적 시간을 직접 검사하는 생성 코드는 상태 전환과 지연 흐름을 읽기 어렵습니다. 일정 간격으로 반복되는 생성 과정을 Coroutine으로 표현합니다.

2. 학습 목표​

3. 핵심 개념​

Coroutine은 yield 지점에서 실행을 잠시 멈추고 이후 프레임에 이어가는 Unity 흐름입니다. 별도 스레드가 아니므로 Unity API를 안전하게 사용할 수 있지만 무거운 계산을 병렬로 처리해 주지는 않습니다. WaitForSeconds는 timeScale의 영향을 받습니다.

4. 단계별 실습​

C# · 파일 경로: Assets/DeliverySorter/Scripts/Spawning/PackageSpawner.cs

PackageSpawner.cs
using System.Collections;
using UnityEngine;

public sealed class PackageSpawner : MonoBehaviour
{
[SerializeField] private PackageItem packagePrefab;
[SerializeField] private Transform spawnPoint;
[SerializeField] private PackageTypeData[] packageTypes;
[SerializeField, Min(0.1f)] private float spawnInterval = 1.5f;

private Coroutine spawnRoutine;

public void BeginSpawning()
{
if (spawnRoutine == null) spawnRoutine = StartCoroutine(SpawnLoop());
}

public void StopSpawning()
{
if (spawnRoutine == null) return;
StopCoroutine(spawnRoutine);
spawnRoutine = null;
}

private IEnumerator SpawnLoop()
{
while (true)
{
SpawnOne();
yield return new WaitForSeconds(spawnInterval);
}
}

private void SpawnOne()
{
if (packageTypes == null || packageTypes.Length == 0) return;
int index = Random.Range(0, packageTypes.Length);
PackageItem item = Instantiate(packagePrefab, spawnPoint.position, Quaternion.identity);
item.Configure(packageTypes[index]);
}
}

이벤트 연결 작업

GameSession의 StateChanged를 구독해 Playing이면 BeginSpawning, Paused 또는 GameOver면 StopSpawning을 호출하는 SpawnStateBinder를 별도 작성합니다.

5. 코드가 동작하는 이유​

Coroutine 참조가 null일 때만 시작하므로 생성 루프가 중복되지 않습니다. 각 반복은 한 택배를 만든 후 지정 시간 동안 양보합니다. 상태 이벤트가 루프의 수명을 제어해 GameOver 뒤 추가 생성을 막습니다.

6. 자주 하는 실수와 해결법​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

Coroutine 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“Coroutine” 실습을 안전하게 진행하기 위한 판단으로 가장 알맞은 것은 무엇인가요?
  2. 문제 2“Coroutine” 실습 중 ‘GameOver에도 루프 유지’ 상황을 발견했습니다. 본문과 일치하는 설명은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

18강. Coroutine 미완료 상태