Files
engine/docs/zh/physics/overall.mdx
2025-03-10 16:50:15 +08:00

122 lines
4.0 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: 0
title: 物理总览
type: 物理
label: Physics
---
物理引擎是游戏引擎中非常重要的组成部分,主要负责以下功能:
- 物理碰撞检测
- 刚体动力学模拟
- 关节约束系统
- 物理事件响应
为了满足不同应用场景的需求Galacean 采用了多后端设计:
- **Lite**: 针对简单交互场景优化,体积小巧
- **PhysX**: 基于 physX物理引擎 提供完整物理特性
两个后端实现了统一的 [物理系统 API](https://github.com/galacean/engine/tree/main/packages/design/src/physics),开发者可以根据项目需求灵活选择。有关物理系统的详细设计说明,请参考 [设计文档](https://github.com/galacean/engine/wiki/Physical-system-design).
<Callout type="info">
对于需要使用物理组件或 `InputManager` 等需要 Raycast 拾取的场景,都需要在使用之前初始化物理引擎。
</Callout>
目前 Galacean 引擎提供两种内置的物理引擎后端实现:
1. [Lite](/apis/physics-lite)[physics-lite](https://github.com/galacean/engine/tree/main/packages/physics-lite)
- 轻量级物理引擎实现
- 仅支持基础的碰撞检测
- 适用于简单交互场景
2. [PhysX](/apis/physics-physx)[physics-physx](https://github.com/galacean/engine/tree/main/packages/physics-physx)
- 基于physX物理引擎通过WebAssembly编译
- 支持高级物理特性和精确模拟
- 适用于复杂物理交互场景
## 选择物理后端
选择物理后端需要考虑功能,性能和包尺寸这三个因素:
### 1. 功能支持
| 功能 | physics-lite | physics-physx |
|------|-------------|--------------|
| 碰撞检测 | ✓ | ✓ |
| 物理效果及反馈 | × | ✓ |
| 连续碰撞检测 | × | ✓ |
| 关节系统 | × | ✓ |
### 2. 性能表现
- **PhysX**:
- WebAssembly 平台下性能最佳
- 自动降级为 JavaScript 实现
- 内置场景加速结构
- **Lite**:
- 轻量实现,性能开销小
- 适合简单场景
### 3. 包体积
- **PhysX**: 约 2.5MBwasm/js
- **Lite**: 轻量级,几乎无额外开销
## 使用方法
### 在编辑器中配置
开发者可以在 [主菜单](/docs/interface/sidebar) 界面打开的 **项目设置** 面板中设置物理后端。
<Image src="https://mdn.alipayobjects.com/huamei_3zduhr/afts/img/A*LO_FRIsaIzIAAAAAAAAAAAAADsJ_AQ/original" />
<Image src="https://mdn.alipayobjects.com/huamei_3zduhr/afts/img/A*ZvWdQqEfIKoAAAAAAAAAAAAADsJ_AQ/original" />
### 脚本使用
若通过脚本初始化引擎,只需要将物理后端对象传入 `Engine` 中即可:
#### 使用 Lite 物理引擎
```typescript
import {LitePhysics} from "@galacean/engine-physics-lite";
const engine = await WebGLEngine.create({
canvas: htmlCanvas,
physics: new LitePhysics(),
});
```
#### 使用 PhysX 物理引擎
```typescript
import { PhysXPhysics } from "@galacean/engine-physics-physx";
const engine = await WebGLEngine.create({
canvas: htmlCanvas,
physics: new PhysXPhysics(),
});
```
## 更多信息
有关物理系统的详细使用,请参考以下文档:
### 碰撞器
- [碰撞器概述](/docs/physics/collider/overview)
- [动态碰撞器](/docs/physics/collider/dynamicCollider) - 可自由运动的物理对象
- [静态碰撞器](/docs/physics/collider/staticCollider) - 固定在场景中的物理对象
- [角色控制器](/docs/physics/collider/characterController) - 专用于角色控制的碰撞器
- [碰撞形状](/docs/physics/collider/colliderShape) - 碰撞器的形状定义
### 关节系统
- [关节系统概述](/docs/physics/joint/overview)
- [固定关节](/docs/physics/joint/fixedJoint) - 完全限制物体间相对运动
- [弹性关节](/docs/physics/joint/springJoint) - 弹簧式距离约束
- [铰链关节](/docs/physics/joint/hingeJoint) - 轴向旋转约束
### 物理场景
- [物理场景](/docs/physics/manager) - 场景中的物理系统管理器
### 物理调试
- [物理调试](/docs/physics/debug) - 物理系统调试工具
```