Menu
CoddyTech

InvokeRepeating, CancelInvoke

Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 23 из 71.

InvokeRepeating(nameof(Blink), 0.5f, 0.5f) вызывает Blink впервые через 0.5 секунды, а затем повторяет вызов каждые 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(): прибавь 1 к eruptions, вызови 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()
    {
        // Запустить извержение через 1 секунду после Play, затем каждые 2 секунды
    }

    // Erupt(): подсчитать извержение, подбросить мяч вверх, записать сообщение в лог; остановиться после третьего извержения
}

Все уроки раздела Физика и игровой процесс

Потренируйтесь самостоятельно: Песочница Unity