InvokeRepeating, CancelInvoke
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 22 из 63.
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(), на каждом кадре будет запланирован ещё один повторяющийся вызов.
Задание
ЛегкоГейзер подбрасывает находящийся на нём мяч в воздух. В его скрипте есть ball, power и счётчик eruptions. Настройте извержения по расписанию:
- Первое извержение происходит через 1 секунду после нажатия Play, затем — каждые 2 секунды.
- Извержение — это метод с именем
Erupt: он увеличиваетeruptionsна 1, толкает мяч вверх с помощьюball.AddForce(Vector3.up * power, ForceMode.Impulse)и выводит в журналEruption 1,Eruption 2и так далее. - После третьего извержения гейзер останавливается навсегда.
Нажмите Play и проследите за мячом, затем нажмите Check.
Попробуйте сами
using UnityEngine;
public class Geyser : MonoBehaviour
{
public Rigidbody ball;
public float power = 6f;
int eruptions;
void Start()
{
// Выполнить извержение через 1 секунду после Play, затем каждые 2 секунды
}
// Erupt(): подсчитать извержения, подбросить шар вверх, вывести сообщение в журнал; остановиться после третьего извержения
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка4Корутины
InvokeInvokeRepeating, CancelInvokeВаша первая корутинаЦиклы в корутинахОстановка корутинПовторение: обратный отсчёт2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Погоня за монетами
Катящийся мячМонеты для сбора