Задать вопрос
@saraw41327
Junior survivalist

Где лучше получать ввод — в Update или FixedUpdate?

Разные гайды пишут разное, но ни гугл, ни ютуб, ни ChatGPT, ни даже официальная документация мне чёткий ответ не дают, а иногда и вовсе противоречат друг другу и самим себе. Используется старая система ввода.

PS. хотелось бы получить аргументированный ответ, а не "делай так, потому что так все делают" или "я так привык делать и ты привыкай".
  • Вопрос задан
  • 155 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 3
GavriKos
@GavriKos Куратор тега Unity
Вся документация говорит что "в апдейте".

Аргументация - FixedUpdate работает не каждый кадр, что в целом и написано в документации. И он предназначен для просчетов физики.
А вот как раз всякие ивенты привязаны именно к Update.
Ответ написан
Комментировать
twobomb
@twobomb
Сделай ввод в FixedUpdate и посмотри на инпут лаг, и поймешь почему не стоит так делать. Хотя если не требуется динамичного управления, то вообще пофиг.
p.s. ну это при условии дефолтной частоты вызовов, сколько она там 25 раз вызывается в сек?
Ответ написан
Комментировать
@Ezekiel4
Охотник на пиратов и сборщик монолитов
TLDR: Update

Unity использует покадровую систему, то есть "вот новый кадр - обновим состояние". Это ключевой момент для понимания вашего вопроса, потому что появляется понятие тайминга, в который невозможно попасть способами, выполняющимися с постоянной периодичностью. Это почти как стрелочные часы без батареек. Могут ли они показать правильное время? Да, два раза в день на одну секунду.

Речь идёт об использовании FixedUpdate и рекурсивного Invoke, а также корутин (без yield return null).

Так как вы о LateUpdate не спрашивали, то и углубляться в него не будем. Остаётся только Update.

Используемые методы можно поделить на две группы - кадрозависимсые и кадронезависимые. К первым можно отнести Input.GetKeyDown, ко вторым Input.GetAxis. Если с кадрозависимыми всё понятно (нелогично их использовать вне Update/LateUpdate), то кадронезавимые возвращают разные значения как для разных таймингов, так и для разной продолжительности нажатия. Поэтому для них можно и так и этак и будет это чисто особенностью вашей игры. Такой же как, например, реализация 2д поворота через scale, rotate или sprite flip.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы