Menu
CoddyTech

InvokeRepeating, CancelInvoke

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

InvokeRepeating(nameof(Blink), 0.5f, 0.5f)는 0.5초 후에 처음으로 Blink를 호출하고, 취소될 때까지 0.5초마다 다시 호출합니다. 첫 번째 숫자는 첫 호출 전 대기 시간이고, 두 번째 숫자는 호출 사이의 시간입니다. CancelInvoke(nameof(Blink))는 이를 중지하고, 이름 없이 CancelInvoke()를 호출하면 스크립트가 예약해 둔 모든 Invoke를 중지합니다.

이 경고등은 Space를 누를 때까지 깜박이다가, 그다음에는 계속 켜져 있습니다.

Light lamp;

void Start()
{
    lamp = GetComponent<Light>();
    InvokeRepeating(nameof(Blink), 0.5f, 0.5f);
}

void Blink()
{
    lamp.enabled = !lamp.enabled;
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        CancelInvoke(nameof(Blink));
        lamp.enabled = true;
    }
}

생성 챕터의 타이머도 float 필드와 Update()의 확인을 사용해 같은 일을 할 수 있습니다. InvokeRepeating을 사용하면 Unity가 시간을 관리하고 호출을 실행합니다. InvokeRepeating 호출은 Start()에 넣어야 합니다. Update()에 넣으면 매 프레임 반복 호출을 하나씩 더 예약하게 됩니다.

challenge icon

챌린지

쉬움

간헐천이 일정한 간격으로 세 번 분출하게 만드세요.

  1. Start()에서 InvokeRepeating(nameof(Erupt), 1f, 2f);을 호출하세요.
  2. void Erupt()를 작성하세요. eruptions에 1을 더하고, ball.AddForce(Vector3.up * power, ForceMode.Impulse);를 호출한 다음 "Eruption " + eruptions를 로그에 기록하세요.
  3. Erupt()의 끝에서 eruptions == 3일 때 CancelInvoke(nameof(Erupt));를 호출하세요.

‘플레이’를 누르세요. 공이 2초 간격으로 세 번 위로 던져집니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

public class Geyser : MonoBehaviour
{
    public Rigidbody ball;
    public float power = 6f;
    int eruptions;

    void Start()
    {
        // Play 후 1초 뒤에 분출하고, 그다음부터는 2초마다 분출
    }

    // Erupt(): 횟수를 세고, ball을 위로 밀어 올린 뒤 로그를 남김; 세 번째 분출 후 중지
}

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

직접 연습해 보세요: Unity 플레이그라운드