step | 物理要前进的时间。 |
void 模拟是否运行。在物理回调期间运行模拟将始终失败。
模拟与此 PhysicsScene 相关的物理。
调用此方法会导致物理在指定的时间段内进行模拟 step
。仅与该物理相关的物理 PhysicsScene 将被模拟。如果此 PhysicsScene 不是默认物理场景(参见 Physics.defaultPhysicsScene)则它与特定场景相关联 Scene 因此,仅在运行模拟时,添加到该场景中的组件才会受到影响 Scene。
如果您将与帧率相关的步长值(如 Time.deltaTime)传递给物理引擎,由于可能出现的帧率不可预测的波动,您的模拟将变得不那么确定。为了获得更确定的物理结果,您应该传递一个固定的步长值到 PhysicsScene.Simulate 每当您调用它时。
您可以在编辑器中调用 PhysicsScene.Simulate 在播放模式之外,但是建议谨慎,因为这会导致模拟具有 Rigidbody 附加的组件。在编辑器中播放模式之外进行模拟时,将对所有物理组件进行完整模拟,包括 Rigidbody, Collider 和 Joint 包括生成接触,但接触不会通过标准脚本回调报告。这是一项安全措施,可以防止回调在场景中删除对象,这将不是可以撤销的操作。以下是一个实现自动模拟模式中所做操作的基本模拟示例。
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.