Files
engine/docs/zh/physics/manager.mdx
luzhuang 234d6b7b46 Add sweep and overlap doc (#2823)
* docs: add sweep and overlap doc
2025-09-19 16:15:05 +08:00

73 lines
2.9 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
order: 2
title: 物理场景
type: 物理
label: Physics
---
物理场景([PhysicsScene](/apis/core/#PhysicsScene))用于管理场景中所有的物理组件,并且负责与物理后端通信,实现有关物理场景的全局操作,例如更新和射线检测等等。在多场景项目中,每个[Scene](/apis/core/Scene)都有自己的物理场景Scene之间的物理系统是相互隔离互不影响的。
## 物理更新
物理场景和渲染场景相互独立,但在程序运行过程中不断同步各自的数据。因此,和[脚本](/docs/script/script)一样,同步的时序也非常重要。物理场景的更新频率和渲染场景不同,通过以下参数进行控制:
```typescript
/** 物理场景的固定更新时间步长(秒) */
fixedTimeStep: number = 1 / 60;
```
### 更新机制
- 每个渲染帧中,物理引擎会按照固定时间步长 [fixedTimeStep](/apis/core/#PhysicsScene-fixedTimeStep) 进行更新
- 如果实际帧间隔大于 `fixedTimeStep`:
- 会执行多次物理更新直到追赶上实际时间
- 单帧最大更新时间由 `engine.time.maximumDeltaTime` 限制
- 如果实际帧间隔小于 `fixedTimeStep`,则累积到下一帧处理
### 物理更新回调
针对物理组件的更新,需要使用[脚本](/docs/script/script)中专门的回调函数:
```typescript
export class Script extends Component {
/**
* 在物理计算前调用,调用次数取决于物理更新频率
*/
onPhysicsUpdate(): void {}
}
```
物理更新在整个更新流程中的位置可以参考下图
<Image src="https://gw.alipayobjects.com/mdn/rms_7c464e/afts/img/A*_8C-TJP2UIgAAAAAAAAAAAAAARQnAQ" />
### 物理系统内部更新流程
物理场景在更新时的执行顺序:
1. 执行 `onPhysicsUpdate` 中的用户逻辑
2. `callColliderOnUpdate` 将被修改的 [实体](/apis/core/#Entity) `Transform` 数据同步给物理碰撞器
3. 更新物理场景
4. `callColliderOnLateUpdate` 将所有 [碰撞器](/docs/physics/collider/overview) 更新后的位置同步给对应的 `实体`
## 设置场景重力
物理场景允许自定义重力方向和大小。重力会影响场景中所有启用重力的[动态碰撞器](/docs/physics/collider/dynamicCollider)。
```typescript
// 获取物理场景的重力值
const gravity = scene.physics.gravity;
// 修改重力 - 将重力改为 0
scene.physics.gravity.set(0, 0, 0);
// 修改重力 - 设置为地球重力加速度 (默认值)
scene.physics.gravity.set(0, -9.81, 0);
```
## 空间查询功能
物理场景提供了多种空间查询功能,用于检测和分析场景中物体的空间关系:
- **[射线检测](/docs/physics/query/raycast)** - 精确的点对点检测,适用于拾取、瞄准等场景
- **[形状投射](/docs/physics/query/sweep)** - 沿方向投射几何体,适用于移动预测、路径规划
- **[重叠检测](/docs/physics/query/overlap)** - 检测区域内的重叠物体,适用于触发器、范围攻击