物理

物理总览

物理引擎是游戏引擎中非常重要的组成部分,主要负责以下功能:

  • 物理碰撞检测
  • 刚体动力学模拟
  • 关节约束系统
  • 物理事件响应

为了满足不同应用场景的需求,Galacean 采用了多后端设计:

  • Lite: 针对简单交互场景优化,体积小巧
  • PhysX: 基于 physX物理引擎 提供完整物理特性

两个后端实现了统一的 物理系统 API,开发者可以根据项目需求灵活选择。有关物理系统的详细设计说明,请参考 设计文档.

对于需要使用物理组件或 InputManager 等需要 Raycast 拾取的场景,都需要在使用之前初始化物理引擎。

目前 Galacean 引擎提供两种内置的物理引擎后端实现:

  1. Litephysics-lite

    • 轻量级物理引擎实现
    • 仅支持基础的碰撞检测
    • 适用于简单交互场景
  2. PhysXphysics-physx

    • 基于physX物理引擎,通过WebAssembly编译
    • 支持高级物理特性和精确模拟
    • 适用于复杂物理交互场景

选择物理后端

选择物理后端需要考虑功能,性能和包尺寸这三个因素:

1. 功能支持

功能physics-litephysics-physx
碰撞检测
物理效果及反馈×
连续碰撞检测×
关节系统×

2. 性能表现

  • PhysX:
    • WebAssembly 平台下性能最佳
    • 自动降级为 JavaScript 实现
    • 内置场景加速结构
  • Lite:
    • 轻量实现,性能开销小
    • 适合简单场景

3. 包体积

  • PhysX: 约 2.5MB(wasm/js)
  • Lite: 轻量级,几乎无额外开销

使用方法

在编辑器中配置

开发者可以在 主菜单 界面打开的 项目设置 面板中设置物理后端。

脚本使用

若通过脚本初始化引擎,只需要将物理后端对象传入 Engine 中即可:

使用 Lite 物理引擎

import {LitePhysics} from "@galacean/engine-physics-lite";
 
const engine = await WebGLEngine.create({
  canvas: htmlCanvas,
  physics: new LitePhysics(),
});

使用 PhysX 物理引擎

import { PhysXPhysics } from "@galacean/engine-physics-physx";
 
const engine = await WebGLEngine.create({
  canvas: htmlCanvas,
  physics: new PhysXPhysics(),
});

更多信息

有关物理系统的详细使用,请参考以下文档:

碰撞器

关节系统

物理场景

物理调试

这篇文档对您有帮助吗?