物理引擎是游戏引擎中非常重要的组成部分。 业界普遍采用 PhysX 引入相关功能。 但是对于轻量级的场景,PhysX 使得最终的应用体积非常大,超出了这些项目的限制。 Galacean 基于多后端设计。 一方面,它通过 WebAssembly 编译得到 PhysX.js ; 另一方面,它也提供了轻量级的物理引擎。 两者在 API 设计上是一致的。 用户只需要在初始化引擎时选择特定的物理后端。 可以满足轻量级应用、重量级游戏等各种场景的需求。有关物理组件的总体设计,可以参考 Wiki.
对于需要使用各种物理组件,以及 InputManager
等需要 Raycast 拾取的场景,都需要在使用之前初始化物理引擎。目前 Galacean 引擎提供两种内置的物理引擎后端实现:
开发者可以在 主菜单 界面打开的 项目设置 面板中设置物理后端。
若通过脚本初始化引擎,只需要将物理后端对象传入 Engine
中即可:
import {LitePhysics} from "@galacean/engine-physics-lite";
const engine = await WebGLEngine.create({
canvas: htmlCanvas,
physics: new LitePhysics(),
});
import { PhysXPhysics } from "@galacean/engine-physics-physx";
const engine = await WebGLEngine.create({
canvas: htmlCanvas,
physics: new PhysXPhysics(),
});
选择物理后端需要考虑到功能,性能和包尺寸这三个因素: