移动/游戏
Unity 中大规模实体/数据导向游戏性能优化:用 ECS…
当在 Unity 中构建需要管理数千实体、优化 CPU 瓶颈或把 OOP 游戏逻辑迁移到 DOTS 时,采用 ECS 模式。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
Unity 中大规模实体/数据导向游戏性特定
解决思路
- 使用数据导向而非面向对象:数据布局改为 data-oriented,内存改为连续存储,处理改为批处理,随实体数量增长争取线性扩展,并优先用于大规模模拟。
- 按 DOTS 结构拆分:Entity 只是轻量 ID(无数据),Component 只放纯数据(无行为),System 只放处理组件的逻辑,World 作为实体容器,Archetype 是组件的唯一组合,Chunk 存储同一 Archetype 的实体内存块。
- 优先使用 ISystem 而不是 SystemBase。
- 尽可能对可编译逻辑使用 Burst 编译。
- 批量处理结构性变更,使用 ECB。
- 使用 Profiler 分析性能,定位瓶颈。
- 使用 Aspects 清晰分组组件。
- 不要使用托管类型(managed types),否则会破坏 Burst。
- 不要在 job 中直接做结构性变更,改用 ECB。
- 不要过度架构,先从简单实现开始。
- 不要忽略 chunk 利用率,将相似实体分组。
- 不要忘记释放,否则 Native collections 会泄漏。
- 当上层导航信息不足时,阅读 references/details.md 获取详细模式和完整示例。
适用边界 · 注意事项
- 不适合实体数量少、以复杂行为为主的游戏逻辑;这类场景传统 OOP 可能更合适。
- 不要在没有明确性能瓶颈或大规模实体需求时过度 ECS 化,先从简单实现开始。
- 非 Unity 或未启用 DOTS/ECS 的项目不适用。