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

Physics2D.Simulate

Объявление

public static bool Simulate(float step);

Параметры

step Время, чтобы продвинуть физику.

Возвращает

bool Была ли запущена симуляция или нет. Запуск симуляции во время обратных вызовов физики всегда завершается ошибкой.

Описание

Смоделируйте физику в сцене.

Вызов Physics2D.Simulate не приводит к тому, что Unity вызывает FixedUpdate. Unity по-прежнему вызывает MonoBehaviour.FixedUpdate со скоростью, определяемой Time.fixedDeltaTime, независимо от того, включено или выключено автоматическое моделирование, и независимо от того, когда вы вызываете Physics2D.Simulate.

Обратите внимание, что если вы передаете значения шага, зависящие от частоты кадров (например, Time.deltaTime), в физический движок, ваша симуляция будет менее детерминированной из-за непредсказуемых колебаний. в частоте кадров, которые могут возникнуть. Чтобы получить более детерминированные результаты физики, вы должны передавать фиксированное значение шага в Physics2D.Simulate каждый раз, когда вы его вызываете.

Вы можете вызвать Physics2D.Simulate в редакторе вне игрового режима, однако рекомендуется соблюдать осторожность, так как это приведет к перемещению игровых объектов, к которым прикреплен Rigidbody2D. При симуляции в Редакторе вне режима игры происходит полная симуляция всех физических компонентов, включая Rigidbody2D, Collider2D, Joint2D и Effector2D, и создаются контакты. Однако о контактах не сообщается через стандартные обратные вызовы скрипта. Это мера безопасности, предотвращающая удаление объектов в сцене обратными вызовами, что не является отменяемой операцией.

Смотрите так же: Physics2D.simulationMode.

Вот пример базовой симуляции, реализующей то, что делается в режиме автоматической симуляции.

using UnityEngine; public class BasicSimulation : MonoBehaviour { private float timer; void Update() { if (Physics2D.simulationMode != SimulationMode2D.Script) return; // do nothing if simulation is not set to be executed via script. timer += Time.deltaTime; // Догнать игровое время. // Продвижение физического моделирования частями Time.fixedDeltaTime // Обратите внимание, что обычно мы не хотим передавать переменную delta в Simulate, так как это приводит к нестабильным результатам. while (timer >= Time.fixedDeltaTime) { timer -= Time.fixedDeltaTime; Physics2D.Simulate(Time.fixedDeltaTime); } // Here you can access the transforms state right after the simulation, if needed... } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3