版本: Unity 6 (6000.0)
语言英语
  • C#

PhysicsScene.Simulate

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交的内容,但我们会阅读用户提出的每项更改建议,并在适当情况下进行更新。

关闭

提交失败

由于某种原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public void Simulate(float step);

参数

step 物理要前进的时间。

返回值

void 模拟是否运行。在物理回调期间运行模拟将始终失败。

描述

模拟与此 PhysicsScene 相关的物理。

调用此方法会导致物理在指定的时间段内进行模拟 step。仅与该物理相关的物理 PhysicsScene 将被模拟。如果此 PhysicsScene 不是默认物理场景(参见 Physics.defaultPhysicsScene)则它与特定场景相关联 Scene 因此,仅在运行模拟时,添加到该场景中的组件才会受到影响 Scene

如果您将与帧率相关的步长值(如 Time.deltaTime)传递给物理引擎,由于可能出现的帧率不可预测的波动,您的模拟将变得不那么确定。为了获得更确定的物理结果,您应该传递一个固定的步长值到 PhysicsScene.Simulate 每当您调用它时。

您可以在编辑器中调用 PhysicsScene.Simulate 在播放模式之外,但是建议谨慎,因为这会导致模拟具有 Rigidbody 附加的组件。在编辑器中播放模式之外进行模拟时,将对所有物理组件进行完整模拟,包括 Rigidbody, ColliderJoint 包括生成接触,但接触不会通过标准脚本回调报告。这是一项安全措施,可以防止回调在场景中删除对象,这将不是可以撤销的操作。以下是一个实现自动模拟模式中所做操作的基本模拟示例。

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.