Відповіді:
FixedUpdate
може працювати швидше або повільніше, ніж Update
залежно від ваших налаштувань. Це залежатиме від завантаження (як швидко Update
працює) та швидкості, яку ви встановили FixedUpdate
(знайдено в меню Правка-> Налаштування проекту-> Час). В ідеалі, оскільки Update
виконується один раз на кадр, саме тут ви хочете ввести вхід. Якщо вам потрібно діяти на вході в FixedUpdate
метод (наприклад, керуючи фізичними органами), встановіть прапори, Update
а потім обробіть їх у FixedUpdate
:
bool leftMouseDown = false;
void Update()
{
if(Input.GetMouseButtonDown(0))
leftMouseDown = true;
}
void FixedUpdate()
{
if(leftMouseDown )
{
//update physics bodies with input
leftMouseDown = false;
}
}
Це все ще гарна ідея контролювати фізику за допомогою FixedUpdate
методу, оскільки навряд чи фізику потрібно оновлювати так часто, а фізику за фіксованим оновленням набагато простіше передбачити ( детермінізм ), ніж фізику за змінним оновленням.
FixedUpdate
. Це одна з тих речей, для якої потрібне тестування ігор, щоб зрозуміти, що "відчуває" правильно.
Вам потрібно зрозуміти, що кожен робить. Update()
називається якомога частіше (не впевнений, можливо, це може бути обмежено), в будь-якому випадку - кожен кадр. FixedUpdate()
називається кожен постійний проміжок часу (отже, "фіксований").
Введення входить в Update()
таке просте (тому що, як ви зауважили, воно FixedUpdate()
може не сприймати подію введення). Однак логіка гри може перейти в будь-яку. Фізика повинна бути детермінованою, і тому вона повинна бути в FixedUpdate()
. Інші речі не повинні. Залежно від використання ви повинні вирішити, яка функція підходить.
Інше варто сказати, що в деяких додатках є оновлення всієї логіки гри в FixedUpdate()
(навіть поза Unity
) - це називається "фіксований крок циклу гри". Наявність всього коду оновлення у функції фіксованого кроку дає детермінізм і змушує ваш додаток вести себе однаково кожного разу (і на кожному пристрої). Також дозволяє отримати деякі фантазійні функції, наприклад, повтори.