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

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,.