@babylonjsmarket/ecs

中文文档
0.9.22发布于 2026/11/04MITTypeScriptES Module零依赖近 30 天下载 1868

与巴比伦和三个渲染器适配器的实体-组件-系统框架

中文使用文档
文档目录11 节
  1. 只要这合适
  2. 安装
  3. 入境点
  4. 快开始
  5. 概念
  6. 组件是数据,系统是逻辑
  7. 事件,而非直接参考
  8. 渲染器适配器是细端口
  9. 发展中的种族探测
  10. 另见
  11. 页:1

@babylonjsmarket/ ecs (英语)

授权的实体-组成部分-系统框架 巴比伦JS市场 游戏——取自内部 CodeLibrary 并作为独立的运行时间发布,因此任何项目都可以依赖它.

只要这合适

                      @babylonjsmarket/ecs              ← you are here
                                ▲
                                │
        ┌───────────────────────┼───────────────────────┐
        │                       │                       │
@babylonjsmarket/arcade   create-arcade games    your game
(curated components)     (scaffolded projects)

@babylonjsmarket/ecs 是基础。 它拥有:

  • 核心ECS系统 —— 说 Component, (中文(简体) ), Entity, (中文(简体) ), System, (中文(简体) ), World, (中文(简体) ), EventBus, (中文(简体) ), SceneLoader, (中文(简体) ), SaveLoad, (中文(简体) ), RaceDetector。 。 。 .
  • 出厂合同 —— 说 RendererAdapter 是将游戏逻辑与任何特定3D引擎脱钩的界面.
  • 巴比伦和三.js适配器 —— 说 BabylonAdapter (哈沃克物理学,全场支持)和 ThreeAdapter (带有可插接的JS物理集成器). 两者都生活在这个包里 所以它们一起进化, 但每个都位于一个子路径后面, 所以只有你实际使用的渲染器才能被拉入.
  • 测试基础设施 —— 说 MockRendererAdapter 单位测试,a runMechanicContract 证明机械师的电池遵守框架合同.

在实体/系统层,一切都是不可知的。 选择巴比伦,如果你想一等的哈沃克物理 和完整的巴比伦堆; 如果你想要一个更瘦的跑步时间 并且你自己也是舒适的接线物理.

安装

npm install @babylonjsmarket/ecs

核心条目有 零运行时间依赖关系。渲染器适配器是可选的对等依赖性——只安装您使用的:

# For BabylonJS
npm install @babylonjs/core @babylonjs/loaders @babylonjs/havok

# For Three.js
npm install three

入境点

导入目录端点
@babylonjsmarket/ecs核心 : Component, (中文(简体) ), Entity, (中文(简体) ), System, (中文(简体) ), World, (中文(简体) ), EventBus, (中文(简体) ), SceneLoader, (中文(简体) ), SaveLoad, (中文(简体) ), RaceDetector, (中文(简体) ), RendererAdapter 接口, MockRendererAdapter, (中文(简体) ), withRaceTracking无
@babylonjsmarket/ecs/babylonBabylonAdapter@babylonjs/core, (中文(简体) ), @babylonjs/loaders, (中文(简体) ), @babylonjs/havok
@babylonjsmarket/ecs/threeThreeAdapter (接受注射器) physicsFactory(中文(简体) )three
@babylonjsmarket/ecs/renderer-types全数 RendererAdapter 类型表面-tuple Vec3,处理类型,光谱接口无
@babylonjsmarket/ecs/testingrunMechanicContract 和相关vitest 助手vitest

快开始

import { World, Component, System, type ISystemQuery } from '@babylonjsmarket/ecs';
import { BabylonAdapter } from '@babylonjsmarket/ecs/babylon';

class Position extends Component {
  x = 0;
  y = 0;
  z = 0;
}

class MoveSystem extends System {
  query: ISystemQuery = { required: [Position] };
  onUpdate(dt: number) {
    for (const entity of this.entities) {
      const p = entity.get(Position)!;
      p.x += dt;
    }
  }
}

const renderer = new BabylonAdapter();
await renderer.init(canvas);

const world = new World({ renderer });
world.addSystem(new MoveSystem(world.eventBus));
const player = world.createEntity('Player');
player.add(new Position());

renderer.startLoop((dt) => world.update(dt));

概念

组件是数据,系统是逻辑

部分扩展 Component 基础课和状态。 系统延伸 System时,宣布 query (所需组件、被排除在外的组件、所需标签),并实施 onUpdate(dt)编辑 World 匹配实体到系统,并运行每个框架.

事件,而非直接参考

系统通过 eventBus.emit(name, data) 并通过电子邮件订阅 this.listen(name, cb)这让系统脱钩 -- PlayerInput 可以开火 MOVE 在不知情或不关心的情况下 Movement, (中文(简体) ), Animation,或 CameraShake 我会听的.

从0.4.0起 System 提供基础类 listen(), (中文(简体) ), listenOnce(),以及 listenForEntity() ——自发订阅,其生平与本系统有联系. 订阅于 onInitialize() 并且当系统从世界中删除时,基础类不订阅一切;没有手动不订阅簿记. 原始内容 eventBus.on(name, cb) 仍然是非系统代码的原始.

渲染器适配器是细端口

这个 RendererAdapter 接口是每个系统用来与3D引擎交谈的内容。 适配器返回不透明手柄( E)MeshHandle, (中文(简体) ), LightHandle, (中文(简体) ), CameraHandle,.),只有创建它们的适配器才能解释. 就是这样 MoveSystem 在巴比伦,三,或 MockRendererAdapter 用于单位测试.

发展中的种族探测

如果你通过了 { detectRaces: true } 页:1 World 构造器,渲染器适配器被包裹在可记录每个手柄突变的代理器上. 当两个系统在同一帧中写到同一个手柄时,你会得到一个指向冲突的堆栈追踪. 停止生产.

另见

页:1

  • 仅限无害环境管理. "type": "module"。 。 。 .
  • 由类型脚本所建; 船 .d.ts 声明.
  • Debug viz 面板(Solid.js)不是从这个包中运出——它们生活在消耗性应用中或 @babylonjsmarket/arcade/viz。 。 。 .

版本与发布记录

@babylonjsmarket/ecs 共发布 54 个版本,首次发布于 2026/05/20;过去 12 个月发布了 54 个版本。

版本发布日期距今
0.9.22latest2026/11/044 天前
0.9.212026/11/026 天前
0.9.202026/10/2514 天前
0.9.192026/10/1524 天前
0.9.182026/10/1029 天前
0.9.172026/10/1029 天前

关于 @babylonjsmarket/ecs 的常见问题

@babylonjsmarket/ecs 是什么?

与巴比伦和三个渲染器适配器的实体-组件-系统框架

如何安装 @babylonjsmarket/ecs?

在项目目录运行 npm install @babylonjsmarket/ecs,或使用 pnpm add / yarn add / bun add。

@babylonjsmarket/ecs 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@babylonjsmarket/ecs 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@babylonjsmarket/ecs 可以商用吗?

@babylonjsmarket/ecs 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@babylonjsmarket/ecs 的下载量有多少?

根据 npm 官方下载统计,@babylonjsmarket/ecs 在 2026/10/08 – 2026/11/06 这 30 天内被下载 1,868 次,日均约 62 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@babylonjsmarket/ecs 还在维护吗?

最新版本 0.9.22 发布于 2026/11/04(4 天前);至今共发布 54 个版本,其中过去 12 个月发布了 54 个;首次发布于 2026/05/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。