Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Описание

Независимое от частоты кадров сообщение MonoBehaviour.FixedUpdate для физических расчетов.

MonoBehaviour.FixedUpdate имеет частоту физической системы; это называется каждым кадром с фиксированной частотой кадров. Выполнять системные вычисления Physics после FixedUpdate. 0,02 секунды (50 вызовов в секунду) — это время между вызовами по умолчанию. Используйте Time.fixedDeltaTime для доступа к этому значению. Измените его, установив желаемое значение в скрипте, или перейдите в раздел Edit > Settings > Time > Fixed Timestep и задайте его там. Частота FixedUpdate больше или меньше частоты Update. Если приложение работает со скоростью 25 кадров в секунду (fps), Unity вызывает его примерно два раза за кадр. В качестве альтернативы, 100 кадров в секунду вызывает примерно два кадра рендеринга с одним FixedUpdate. Управляйте требуемой частотой кадров и частотой Fixed Timestep в настройках Time. Используйте Application.targetFrameRate, чтобы установить частоту кадров.

Используйте FixedUpdate при использовании Rigidbody. Установите силу Rigidbody, и она будет применяться к каждому фиксированному кадру. FixedUpdate происходит на измеренном временном шаге, который обычно не совпадает с MonoBehaviour.Update.

В следующем примере количество вызовов Update сравнивается с количеством вызовов FixedUpdate. FixedUpdate выполняется 50 раз в секунду. (Код игры работает со скоростью около 200 кадров в секунду на тестовой машине.).

using System.Collections; using System.Collections.Generic; using UnityEngine; // Пример GameObject.FixedUpdate. // // Измеряем частоту кадров, сравнивая FixedUpdate с Update. // Показывать ставки каждую секунду. public class ExampleScript : MonoBehaviour { private float updateCount = 0; private float fixedUpdateCount = 0; private float updateUpdateCountPerSecond; private float updateFixedUpdateCountPerSecond; void Awake() { // Если это раскомментировать, частота кадров снизится до 10 кадров в секунду. // Это будет означать, что FixedUpdate вызывается чаще, чем Update. //Application.targetFrameRate = 10; StartCoroutine(Loop()); } // Увеличить количество вызовов Update. void Update() { updateCount += 1; } // Увеличить количество вызовов FixedUpdate. void FixedUpdate() { fixedUpdateCount += 1; } // Показать количество обращений к обоим сообщениям. void OnGUI() { GUIStyle fontSize = new GUIStyle(GUI.skin.GetStyle("label")); fontSize.fontSize = 24; GUI.Label(new Rect(100, 100, 200, 50), "Update: " + updateUpdateCountPerSecond.ToString(), fontSize); GUI.Label(new Rect(100, 150, 200, 50), "FixedUpdate: " + updateFixedUpdateCountPerSecond.ToString(), fontSize); } // Обновлять оба значения CountsPerSecond каждую секунду. IEnumerator Loop() { while (true) { yield return new WaitForSeconds(1); updateUpdateCountPerSecond = updateCount; updateFixedUpdateCountPerSecond = fixedUpdateCount; updateCount = 0; fixedUpdateCount = 0; } } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3