Menu
CoddyTech

첫 코루틴 만들기

Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 23번째.

Update()는 매 프레임마다 끝나야 하므로 기다릴 수 없습니다. 코루틴은 가능합니다. 코루틴은 일시 중지되었다가 멈춘 지점에서 나중에 이어서 실행되는 메서드입니다. 코루틴은 IEnumerator를 반환하며, 이를 사용하려면 using System.Collections;가 필요합니다. 코루틴 안의 각 yield return은 일시 중지 지점입니다. C#에서 yield return은 값을 한 번에 하나씩 내보내는 메서드를 만듭니다. 대기가 끝나면 Unity가 다음 값을 요청합니다. yield return null은 한 프레임을 기다리고, yield return new WaitForSeconds(3f)는 3초를 기다립니다.

StartCoroutine(Cycle())은 코루틴을 시작합니다. 이 신호등은 초록색으로 바뀌고, 3초 후 노란색으로 바뀐 다음, 1초 더 지나면 빨간색으로 바뀝니다.

using System.Collections;
using UnityEngine;

public class TrafficLight : MonoBehaviour
{
    Renderer lamp;

    void Start()
    {
        lamp = GetComponent<Renderer>();
        StartCoroutine(Cycle());
    }

    IEnumerator Cycle()
    {
        lamp.material.color = Color.green;
        yield return new WaitForSeconds(3f);
        lamp.material.color = Color.yellow;
        yield return new WaitForSeconds(1f);
        lamp.material.color = Color.red;
    }
}

StartCoroutine은 코루틴을 첫 번째 yield까지 즉시 실행한 다음, Start()가 계속 실행됩니다. Unity는 각 대기 후 코루틴을 다시 실행하며, 지역 변수는 이전 상태 그대로 유지됩니다. StartCoroutine 없이 단독으로 호출한 Cycle();은 아무것도 하지 않습니다. 일시 중지된 메서드를 만들고 버릴 뿐, 그 안의 코드는 한 줄도 실행되지 않습니다. 그리고 yield return 3f;는 3초 동안 기다리는 코드가 아닙니다. Unity는 WaitForSeconds와 같은 대기 객체만 인식하며, 그 외의 값은 모두 한 프레임으로 처리합니다.

challenge icon

챌린지

쉬움

Spikes가 바닥 아래에서 기다리고 있습니다. 이름이 Spring인 코루틴으로 Space 키를 눌러 함정을 작동시키세요:

  • 즉시: Click을 로그에 기록합니다.
  • 0.5초 후: spikes가 1단위 위로 튀어 오릅니다.
  • 그로부터 2초 후: 다시 1단위 아래로 내려갑니다.

Play를 누르고 Space 키를 눌러 지켜본 다음 Check를 누르세요.

직접 해보기

using System.Collections;
using UnityEngine;

public class SpikeTrap : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // 코루틴으로 함정을 작동시키기
        }
    }

    // IEnumerator Spring(): 클릭, 0.5 s 기다리기, 1 unit 위로 이동, 2 s 기다리기, 1 unit 아래로 이동
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

물리와 게임플레이의 모든 레슨