Відповіді:
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) - це називається "фіксований крок циклу гри". Наявність всього коду оновлення у функції фіксованого кроку дає детермінізм і змушує ваш додаток вести себе однаково кожного разу (і на кожному пристрої). Також дозволяє отримати деякі фантазійні функції, наприклад, повтори.