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() он запланировал бы ещё один повторяющийся вызов на каждом кадре.
Задание
ЛегкоСделай так, чтобы гейзер извергался три раза по расписанию.
- В
Start()вызовиInvokeRepeating(nameof(Erupt), 1f, 2f);. - Напиши
void Erupt(): прибавь 1 кeruptions, вызовиball.AddForce(Vector3.up * power, ForceMode.Impulse);и выведи в журнал"Eruption " + eruptions. - В конце
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(): подсчитать извержение, подбросить мяч вверх, записать сообщение в лог; остановиться после третьего извержения
}
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка4Корутины
InvokeInvokeRepeating, CancelInvokeВаша первая корутинаЦиклы в корутинахОстановка корутинПовторение: обратный отсчёт10Проект: Побег с арены
АренаОхотники2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Монетная гонка
Катящийся шарСобираем монетыПотренируйтесь самостоятельно: Песочница Unity