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

PhysicsScene2D.Simulate

Declaration

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

Параметры

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

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

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

Описание

Симулировать физику, связанную с этим PhysicsScene.

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

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

Вы можете вызвать PhysicsScene2D.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 и Physics2D.Simulate.

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

using UnityEngine;

public class BasicSimulation : MonoBehaviour { public PhysicsScene physicsScene; private float timer;

void Update() { if (!physicsScene.IsValid()) return; // do nothing if the physics Scene is not valid.

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; physicsScene.Simulate(Time.fixedDeltaTime); }

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