PhysicsScene.Simulate
Declaration
public void Simulate(float step);Параметры
| Параметр | Описание |
|---|---|
| шаг | Время для продвижения физики. |
Возвращаемое значение
void Было ли выполнено моделирование или нет. Запуск моделирования во время обратных вызовов физики всегда будет неудачным.
Описание
Симулировать физику, связанную с этим PhysicsScene.
Вызов этого метода вызывает симуляцию физики в течение указанного step времени. Только физика, ассоциированная с этим PhysicsScene будет симулироваться. Если этот PhysicsScene не является физикой по умолчанию Scene (см. Physics.defaultPhysicsScene), то он ассоциируется с конкретным Scene и как таковой, только компоненты, добавленные к этому Scene будут затронуты при запуске симулирования.
Если вы передаете в движок физики значения шагов, зависящие от частоты кадров (например, Time.deltaTime), ваша симуляция будет менее детерминированной из-за непредсказуемых колебаний частоты кадров, которые могут возникнуть. Для достижения более детерминированных результатов физики, вы должны передавать фиксированное значение шага PhysicsScene.Simulate каждый раз, когда вы его вызываете.
Вы можете вызвать PhysicsScene.Simulate в Редакторе вне режима воспроизведения, однако рекомендуется проявлять осторожность, так как это приведет к тому, что симуляция переместит GameObject, к которому прикреплен компонент Rigidbody. При симулировании в Редакторе вне режима воспроизведения, полная симуляция происходит для всех физических компонентов, включая Rigidbody, Collider и Joint, включая генерацию контактов, однако контакты не сообщаются через стандартные обратные вызова скриптов. Это мера безопасности, чтобы предотвратить возможность удаления объектов в Scene обратными вызовами, что было бы неотменяемой операцией. Вот пример базовой симуляции, которая реализует то, что делается в автоматическом режиме симулирования.
using UnityEngine; using UnityEngine.SceneManagement;
public class MultiScenePhysics : MonoBehaviour { private Scene extraScene;
public void Start() { // First create an extra scene with local physics extraScene = SceneManager.CreateScene("Scene", new CreateSceneParameters(LocalPhysicsMode.Physics3D));
// Mark the scene active, so that all the new GameObjects end up in the newly created scene SceneManager.SetActiveScene(extraScene);
PopulateExtraSceneWithObjects(); }
public void FixedUpdate() { // All of the non-default physics scenes need to be simulated manually var physicsScene = extraScene.GetPhysicsScene(); physicsScene.Simulate(Time.fixedDeltaTime); }
public void PopulateExtraSceneWithObjects() { // Create GameObjects for physics simulation var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); sphere.AddComponent<Rigidbody>(); sphere.transform.position = Vector3.up * 4; } }
Дополнительные ресурсы: ,Physics.Simulate,.