# @babylonjsmarket/ecs 中文文档

规范地址：https://npmcn.com/package/%40babylonjsmarket/ecs/

版本：0\.9\.22
npm 元数据更新时间：2026-11-04T00:57:36.280Z
中文译文更新时间：2026-11-08T07:36:20.236Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40babylonjsmarket/ecs
原文对照：https://npmcn.com/package/%40babylonjsmarket/ecs/?lang=original
项目主页：https://github.com/babylonjsmarket/ecs#readme
源码仓库：https://github.com/babylonjsmarket/ecs

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：2.7 MB，130 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- peer 依赖：three \*，solid-js ^1\.8\.0，@babylonjs/core \*，@babylonjs/lite \*，@babylonjs/havok \*，@babylonjs/loaders \*，@dimforge/rapier3d-compat \*
- 首次发布：2026-05-19T19:49:49.068Z
- 最新版本发布：2026-11-04T00:57:36.124Z
- 近 30 天下载量：1868（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：54（近 12 个月 54 个）

## 中文简介

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

## 安装

```sh
npm install @babylonjsmarket/ecs
```

也可以使用：`pnpm add @babylonjsmarket/ecs`、`yarn add @babylonjsmarket/ecs`、`bun add @babylonjsmarket/ecs`

## README

# @babylonjsmarket/ ecs (英语)

授权的实体-组成部分-系统框架 [巴比伦JS市场](https://babylonjsmarket.com/) 游戏——取自内部 `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` 证明机械师的电池遵守框架合同.

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

## 安装

```bash
npm install @babylonjsmarket/ecs
```

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

```bash
# 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/babylon` | `BabylonAdapter` | `@babylonjs/core`, (中文(简体) ), `@babylonjs/loaders`, (中文(简体) ), `@babylonjs/havok` |
| `@babylonjsmarket/ecs/three` | `ThreeAdapter` (接受注射器) `physicsFactory`(中文(简体) ) | `three` |
| `@babylonjsmarket/ecs/renderer-types` | 全数 `RendererAdapter` 类型表面-tuple `Vec3`,处理类型,光谱接口 | 无 |
| `@babylonjsmarket/ecs/testing` | `runMechanicContract` 和相关vitest 助手 | `vitest` |

## 快开始

```ts
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` 构造器,渲染器适配器被包裹在可记录每个手柄突变的代理器上. 当两个系统在同一帧中写到同一个手柄时,你会得到一个指向冲突的堆栈追踪. 停止生产.

## 另见

-   **[@babylonjsmarket/ arcade (英语)](https://www.npmjs.com/package/@babylonjsmarket/arcade)** ——由14个可再使用组件(元件、相机、灯光、输入、物理、分数、动画)组成的一组编组。 如果你想要电池就从这里开始.
-   **[@babylonjsmarket/ create-arcade (中文(简体) )](https://www.npmjs.com/package/@babylonjsmarket/create-arcade)** ——CLI脚手架用于新的街机风格游戏. 设置一个上面两个软件包都使用的项目.
-   **[巴比伦JS市场](https://babylonjsmarket.com/)** ——新增组件的招商场,全程课程,以及样板游戏.

## 页:1

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

## 常见问题

### @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 和提交记录判断。

