Unity 6.3
0 онлайн 67 гостей 3 в системе
Вход

Physics2D.Simulate

Declaration

public static bool Simulate(float deltaTime, int simulationLayers = Physics2D.AllLayers);

Параметры

Параметр Описание
deltaTime Время для продвижения физики.
simulationLayers Слои Rigidbody2D и Collider2D для имитации.

Возвращаемое значение

логическое Запускалась ли симуляция или нет. Запуск симуляции во время обратных вызовов физики всегда будет неудачным.

Описание

Моделирование физики в стандартной сцене физики.

Вызов Physics2D.Simulate выполнит один шаг симулирования, симулируя физику в течение указанного step времени.

По умолчанию, Все слои симулируются, однако если вы указываете слои, то только Rigidbody2D на этих слоях будут симулироваться. Вместе с этим, будут обрабатываться только контакты для Collider2D на указанном layer(s). Наконец, будут обрабатываться только joints или effectors на указанном layer(s).

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

NOTE: Вызов Physics2D.Simulate не вызывает Unity для вызова FixedUpdate. Unity все еще вызывает MonoBehaviour.FixedUpdate со скоростью, определенной Time.fixedDeltaTime независимо от того, включена или выключена автоматическая симуляция, и независимо от того, когда вы вызываете Physics2D.Simulate. Кроме того, если вы передаёте движку физики значения шагов, зависящие от частоты кадров (например, Time.deltaTime), то ваша симуляция будет менее детерминированной из-за непредсказуемых колебаний частоты кадров, которые могут возникнуть. Чтобы достичь более детерминированных физических результатов, вы должны передавать Physics2D.Simulate фиксированное значение шага каждый раз, когда вы его вызываете.

Дополнительные ресурсы: Physics2D.simulationMode и PhysicsScene2D.Simulate.

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

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;

// Catch up with the game time. // Advance the physics simulation in portions of Time.fixedDeltaTime // Note that generally, we don't want to pass variable delta to Simulate as that leads to unstable results. while (timer >= Time.fixedDeltaTime) { timer -= Time.fixedDeltaTime; Physics2D.Simulate(Time.fixedDeltaTime); }

// Here you can access the transforms state right after the simulation, if needed... } }