Timers. Unreal Engine 4 по-простому

-Часики тикают, Шерлок.

-Поставь их на таймер...

Сегодня вечером:
-почему Event Tick - зло?
-как использовать таймеры?
-сделаем автоматическую стрельбу.

Введение

Новички любят подцеплять различные события на Event Tick. Зачастую выполнять событие каждый кадр не нужно, и к тому же, это сильно влияет на производительность. И тут на помощь приходят Таймеры.

Для чего нужны таймеры?

Если нужно сделать автоматическую стрельбу.

Еслинужно сделать обводку предмета, когда игрок на него смотрит.

Если нужно реализовать отсчёт времени.

Как пользоваться?

Есть 2 вида таймеров: для функций и для Event'ов. Я покажу на примере Event таймера.

Timers. Unreal Engine 4 по-простому

Входные данные:
Event - для подключения вызываемого Event'а.
Time - через какое время будет вызван Event.
Looping - будет ли вызов Event'а повторяться.
Выходные данные :
ReturnValue - для управления таймером.

Работаем!

Что мы хотим? Автоматическую стрельбу!
Как это сделать?
В блупринте FirstPersonCharacter найди следующий код:

Timers. Unreal Engine 4 по-простому

Тут по нажатию кнопки, отвечающей за InputFire производится единичный выстрел. А я хочу стрелять постоянно. Для этого нам нужно поставить таймер, чтобы через каждые, ну, допустим, пол секунды производился повторный выстрел.
Для этого наш InputFire должен запустить этот самый таймер. А если кнопка отпущена - очистить его.
Создай новый Event, который будет производить выстрел, (так как наш InputFire будет занят запуском таймера).
Должно получиться так:

Timers. Unreal Engine 4 по-простому

Теперь создай Timer By Event. Подключи к нему наш EventShoot через красный квадратик и InputFire через обычный вход. Укажи время, через которое будет производиться второй выстрел. И поставь галочку напротив Looping.

Должно получиться так:

Timers. Unreal Engine 4 по-простому

Теперь когда я нажимаю на кнопку выстрела, я начинаю постоянно стрелять. Но я хочу стрелять только когда кнопка нажата. Для этого делаем следующее:

Timers. Unreal Engine 4 по-простому

Что тут происходит?
Когда я нажимаю кнопку выстрела, запускается таймер и через указанное время выполняет Event, который мы к нему подцепили. Когда я отпускаю кнопку, таймер очищается.
Проверяем:

Шикарно!
ВАЖНО!!!!
Таймер начинает отсчитывать время СРАЗУ после вызова Event'а, а не после его окончания. То есть, если у вас в Event'е есть Delay в 5 секунд, а таймер у вас поставлен на 0,5 секунд, то таймер всё равно отсчитает 0,5 секунд, а не 5,5.

Заключение

Старайтесь не использовать Event Tick. Где возможно - замените его на Timer.
Предлагайте темы для статей в комментарии.
У меня в голове вертится мысль сделать стрим, где мы реализуем какой-нибудь простой проект. Мне просто нужно знать - "стоит ли игра свеч" и сколько примерно на стриме будет человек. Время стрима и все остальные вопросы можем согласовать в моём паблике ВКонтакте:

Спасибо, что прочитали!

3333
16 комментариев

Есть три стадии развития программиста на UE4.

1) Программист использует тик, где это только возможно
2) Программист боится использовать тик и старается этого не делать вообще
3) Программист использует тик и не парится. .)

3

имхо - если у тебя больше пары сотен объектов движется, игроки не будут вам благодарны

Вот так использовать ссылку на объекты не стоит. Сделай переменную и используй её, а то и сам запутаешься и макаронов наделаешь.

1

Дабы не забивать статью лишней информацией, в данном случае этим можно пренебречь.

1

Неочевидная деталь: в Set Timer by Function Name можно вписывать не только имя функции, но и имя события.

1

Спасибо! Завтра посмотрю и поправлю.