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

PhysicsScene2D.Simulate

提出建议

成功!

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

关闭

提交失败

由于某种原因而无法提交您的建议。请在几分钟后<a>重试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

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

参数

deltaTime 物理推进的时间。
simulationLayers 要模拟的 Rigidbody2DCollider2D 图层。

返回值

bool 代表是否运行了模拟。在物理回调过程中运行模拟将始终失败。

描述

模拟与这个 PhysicsScene 关联的物理。

调用 PhysicsScene2D.Simulate 将执行一个模拟步骤,在指定的时间跨度 step 模拟物理。

默认情况下,模拟 所有图层,但如果你指定图层,那么只模拟 Rigidbody2D。此外,只处理指定图层的 Collider2D 的接触。最后,只处理指定图层上的 关节效应器

可以在播放模式之外的编辑器中调用 PhysicsScene2D.Simulate,但是建议谨慎使用,因为这将导致模拟移动带有附加 Rigidbody2D 组件的 GameObject。在播放模式之外的编辑器中进行模拟时,将对所有物理组件进行完全模拟,其中包括 Rigidbody2DCollider2DJoint2DEffector2D,也会生成接触。但是,不会通过标准脚本回调报告接触。这是一项安全措施,旨在防止回调删除场景中的对象,这是不可撤消的操作。

注意:调用 Physics2D.Simulate 不会导致 Unity 调用 FixedUpdate。无论是否启用自动仿真,Unity 仍会以 Time.fixedDeltaTime 定义的频率调用 MonoBehaviour.FixedUpdate,并且无论您何时调用 Physics2D.Simulate。此外,如果您将帧速率相关步长值(如 Time.deltaTime)传递给物理引擎,那么由于可能出现帧速率不可预测的波动,您的仿真将不那么确定性。为了获得更确定的物理结果,您应在每次调用 Physics2D.Simulate 时传递一个固定步长值。

其他资源: Physics2D.simulationModePhysics2D.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... } }