Menu
CoddyTech

코루틴에서 반복문 사용하기

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

내부에 yield return이 있는 루프는 각 반복이 다음 반복 전에 일시 중지되므로 여러 프레임에 걸쳐 실행됩니다. WaitForSeconds를 사용하면 루프가 일정한 간격으로 무언가를 반복합니다. 이 사이렌은 3번 깜박입니다:

IEnumerator Flash()
{
    for (int i = 0; i < 3; i++)
    {
        lamp.enabled = true;
        yield return new WaitForSeconds(0.2f);
        lamp.enabled = false;
        yield return new WaitForSeconds(0.2f);
    }
}

yield return null을 사용하면 조건이 충족될 때까지 루프가 프레임마다 조금씩 실행됩니다. 코루틴이 무언가를 애니메이션으로 만드는 방식이 바로 이것입니다. 크기가 1인 이 풍선은 크기가 2에 도달할 때까지 초당 0.5씩 커진 다음 다음 내용을 출력합니다:

IEnumerator Inflate()
{
    while (transform.localScale.x < 2f)
    {
        transform.localScale += Vector3.one * 0.5f * Time.deltaTime;
        yield return null;
    }
    Debug.Log("Full");
}

Time.deltaTime은 여기서 Update()에서와 같이 작동합니다. 코루틴은 프레임마다 한 번 재개되고, 루프 다음 줄은 루프가 끝난 경우에만 실행됩니다. yield가 없으면 전체 루프가 하나의 프레임 안에서 실행되어 풍선이 즉시 가득 찹니다. while (true) 루프는 매 반복마다 yield하는 한 코루틴에서 사용해도 괜찮습니다. yield하지 않으면 프레임을 반환하지 않아 Unity 편집기가 멈춥니다.

challenge icon

챌린지

쉬움

Space 키를 누르면 성의 Portcullis의 Ride 코루틴이 시작됩니다. 게이트가 한 번 왕복하도록 Ride를 작성하세요.

  • height(3) 단위만큼 speed(초당 1.5)로 올라가고, 꼭대기에서 정확히 멈춘 다음 Open을 로그에 기록합니다.
  • 1초 동안 열린 상태를 유지합니다.
  • 같은 속도로 처음 위치(down)까지 내려간 다음 Closed를 로그에 기록합니다.

Play를 누른 뒤 Space 키를 누르고, Check를 누르세요.

직접 해보기

using System.Collections;
using UnityEngine;

public class Portcullis : MonoBehaviour
{
    public float speed = 1.5f;
    public float height = 3f;
    Vector3 down;

    void Start()
    {
        down = transform.position;
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            StartCoroutine(Ride());
        }
    }

    IEnumerator Ride()
    {
        // speed의 속도로 height만큼 올라가고 Open을 로그에 기록한 뒤, 1초 동안 머물렀다가 다시 내려와 Closed를 로그에 기록합니다
        yield return null;
    }
}
quiz icon실력 점검

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

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