Ручно установленное моделирование физики
Управляйте моделированием физики вручную, чтобы решить, когда будут выполняться расчеты физики, чтобы согласовать обновления физики с фактической производительностью вашего приложения и избежать излишних обновлений. Это может помочь оптимизировать производительность во время загруженных кадров и полезно для сценариев, требующих тесной синхронизации с игровой логикой или пользовательскими циклами обновления физики.
Ручное управление физическим моделированием для:
- Обеспечение стабильности и последовательности: Физико-математические системы разработаны для небольших, последовательных временных шагов. Переменные значения временных шагов, такие как
Time.deltaTime, могут вызвать нестабильность моделирования и привести к таким проблемам, как прохождение объектов друг через друга, явление, известное как туннелирование, при низких частотах кадров или тревожное поведение при колебании частоты кадров. - Создание воспроизводимого поведения: Использование фиксированного шага крайне важно для более воспроизводимого поведения физики (хотя истинный детерминизм с PhysX имеет другие проблемы).
- Избегайте больших, неточных шагов: если частота кадров падает,
Time.deltaTimeувеличивается. Моделирование физического шага с большой, переменной дельтой может быть вычислительно ресурсоемким и менее точным, потенциально усугубляя проблемы производительности.
Используйте Physics.Simulate(float stepTime) (или yourPhysicsScene.Simulate(float stepTime)) для ручного управления физическим моделированием и в конкретных, локальных PhysicsScene случаях. Обратитесь к Обучающий материал по физике в нескольких сценах, чтобы узнать больше о многосценной физике.
При вызове Physics.Simulateрекомендуется использовать фиксированный шаг времени, а не напрямую передавать Time.deltaTime. Например, используйте то же значение, которое можно использовать в Project Настройки’ Фиксированный шаг времени, например 0.02 для 50 Гц.
Если вы вручную симулируете физику в сцене с помощью Physics.Simulate(), убедитесь, что автоматическое симулирование отключено. Вы можете сделать это, установив Режим моделирования на Скрипт. В режиме Скрипт (либо через Project Настройки или скрипт), вы должны вызвать Physics.Simulate для сцены на выбранной частоте с соответствующим, предпочтительно фиксированным, шагом времени.
Чтобы отключить автоматическое моделирование, в Редакторе:
- Выберите Изменить > Project Настройки, чтобы открыть окно Настройки Project.
- Выберите вкладку Physics > Settings.
- Выберите вкладку GameObject.
- Установите Режим симулирования на Сценарий.
Чтобы отключить автоматическую симуляцию, в скрипте установите Physics.simulationMode = SimulationMode.Script;. Обычно, вы делаете это в начале вашей игры, до того, как произойдет какая-либо физика симулирования.
Дополнительные ресурсы
- Unity Profiler
- Управление временем и частотой кадров
- Память Profiler
- Физика Project Настройки
- Время
- Оптимизация физики для игр, требующих только запросов или не симулирующих игры
- Physics.Simulate
- Мульти-Scene Учебник по физике