mcpField
E
ecs-design

ecs-design

github.com/christopher-buss开发882 次安装5 周前更新
代码仓库

关于 ecs-design

ecs-design 是面向 Roblox 中 jecs 的 ECS 设计指导技能,以列式数据库模型帮助开发者设计组件、实体、系统、查询和 Archetype。

主要功能

  1. 01列式数据库式 ECS 模型
  2. 02组件粒度设计指导
  3. 03实体与关系选择
  4. 04查询和系统设计
  5. 05Archetype 碎片化指导

适用场景

  1. 01判断数据是否应放入实体
  2. 02决定拆分或合并组件
  3. 03设计查询与系统职责

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/christopher-buss/skills --skill ecs-design

安装后在 Claude Code 中输入/ecs-design确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

GENERATION.md
references/
best-practices-components.md
best-practices-entities.md
best-practices-systems.md
core-database-model.md
core-query-design.md

详细介绍

ECS 设计原则

适用于 Roblox 中 jecs 的设计指南。

核心思维模型

将 ECS 视为列式数据库:

数据库ECS
表原型(唯一的组件组合)
列组件类型
行实体
查询系统迭代

设计问题:“我会为此单独创建一个数据库列吗?”

核心参考

主题描述参考
数据库模型将 ECS 视为列式数据库、规范化、碎片化core-database-model
查询设计多实体查询、约束分解、遍历core-query-design

最佳实践

主题描述参考
组件设计粒度选择、何时拆分或合并、标签与数据best-practices-components
系统设计单一职责、避免无谓工作、顺序、数据流best-practices-systems
实体设计何时创建实体、延迟创建、扩展模式best-practices-entities

快速决策指南

问题答案
这应该是一个实体吗?只有当它需要随时间变化的实例级状态时
拆分还是合并?“是否有系统需要 A,但不需要 B?”
标签还是数据组件?标签用于稳定分类(可自由添加或移除),数据用于状态
关系还是实体引用?需要反向查找时使用关系,否则使用实体成员
碎片化不好吗?只有在原型数量达到数千且查询范围很广时
何时需要关注 DOD?实体数量达到数千、每帧运行且受 CPU 限制时

常见错误

错误不利之处修正方式
单体组件缓存浪费、耦合紧密按访问模式拆分
组件过于原子化查询复杂、状态无效合并语义单元
频繁向大型实体添加或移除组件会复制所有组件数据改为修改数据组件
每个关联都使用关系造成碎片化,却没有收益仅用于单向关联时使用实体成员
在系统内缓存查询每帧都会创建新的缓存在模块作用域创建缓存查询

核心原则

  1. 按访问模式划分组件 — 将系统需要一起使用的数据归为一组
  2. 原型转换会复制数据 — 添加或移除组件时,会将所有数据复制到新的原型;对于小型实体,开销较低;对于大型实体,开销较高
  3. 实体成员与关系 — 正向查找使用实体成员,反向查找或分组使用关系
  4. 在模块作用域缓存查询 — 切勿在系统内调用 .cached()
  5. 在查询中筛选 — 使用 with/without,而非代码条件判断
  6. 碎片化可能有帮助 — 关系支持高效的分组查询

评论

支持 Markdown