ECS随笔2
文章目录目标-pureEcsSimulation ECS WorldEntity设计Conponent设计System设计表现层最佳实践Query 和存储设计Command Buffer目标-pureEcsentity只做IDcomponent只放数据system只写逻辑view层只负责表现输入(命令)、网络(命令)、配置、资源、UI((命令))都作为外围系统接入。不要从继承树开始设计应该从“一个战斗世界里有哪些数据”和“每帧哪些规则处理这些数据”开始设计。Command Layer(输入和网络命令)Simulation ECS World(核心战斗逻辑)Event StreamSnapshot StorePresentation World(表现层镜像)RendererConfig ServiceAsset ServiceNetwork SyncBattle UIReplay Service(/sync/debug)Simulation ECS World逻辑世界应该满足不引用任何显示对象不播放声音不直接加载资源不直接操作 UI给定相同初始状态和相同输入命令结果应该一致。Entity设计constentityIdworld.createEntity();world.add(entityId,IdentityComponent,...);world.add(entityId,TransformComponent,...);world.add(entityId,HealthComponent,...);world.add(entityId,SkillComponent,...);Conponent设计Component 只放数据不放业务方法。数据状态表现意图System设计系统应该按固定顺序执行避免“谁先 tick 不清楚”的问题。推荐帧内顺序命令消费/合法校验/写入组件生成组合创建实体/初始化配置快照AI根据AIComponent决定下一步意图/不直接播放动作特效/可以写入 CastRequestComponent 或移动目标索敌写入数据组件技能请求写入数据组件技能施法移动炮弹碰撞输出 HitEvent受击伤害消费 HitEvent 或 DamageRequestbuff死亡清理事件快照表现层最佳实践表现层可以使用普通 OOP也可以再做一个 Render ECS。核心原则是不污染 Simulation ECS。数据唯二来源事件快照Query 和存储设计从 0 开始时可以先做简单清晰的 ECS不必一开始就做复杂 archetype这是啥。第一版推荐classWorld{privatenextEntityId1;privatealivenewSetEntityId();privatestoresnewMapComponentType,MapEntityId,unknown();createEntity():EntityId;destroyEntity(entity:EntityId):void;addT(entity:EntityId,type:ComponentTypeT,data:T):void;getT(entity:EntityId,type:ComponentTypeT):T|undefined;removeT(entity:EntityId,type:ComponentTypeT):void;query(...types:ComponentType[]):IterableEntityId;等性能成为问题再升级到底层实现优化/工程能力archetype 存储【存储性能】按“组件组合”给实体分组。比如同时有 Transform Health Skill 的实体放一组方便系统批量遍历。sparse set【存储性能】一种高效存储 Entity 和 Component 的结构常用于快速判断“某实体有没有某组件”、快速增删组件。SoA 连续数组【存储性能】Structure of Arrays把同类字段分开连续存比如所有 x 放一个数组、所有 y 放一个数组遍历性能更好。changed flag【系统调度和刷新效率】变化标记。比如血量没变就不刷新血条位置没变就不同步 View。command buffer【系统调度和刷新效率】命令缓冲。System 遍历时不立刻创建/删除实体而是先记录命令等这一帧末尾统一执行避免边遍历边改集合出 bug。不要过早为了性能牺牲可理解性。Command BufferSystem 遍历时不要直接创建/删除大量实体推荐每帧固定在 CleanupSystem 或 CommandBufferFlushSystem 统一提交。这样可以避免遍历组件时修改集合导致 bug。

相关新闻

毕业即失业?不,2026学会这个AI工具,你的就业面直接拓宽3倍

毕业即失业?不,2026学会这个AI工具,你的就业面直接拓宽3倍

关注 「软件测试就业联盟」公众号,陪你走好校招求职的每一步上个月参加一个技术交流会,碰到一个老朋友。他在某大厂带测试团队,去年团队20个人,今年只剩12个。我问他减的人去哪了。他说:“不是裁员,是自然流…

2026/6/30 4:58:20阅读更多 →
keil stm32F4,F1,F0,H7常用 pack库函数安装包分享

keil stm32F4,F1,F0,H7常用 pack库函数安装包分享

keil在线下载pack很慢,基本下不下来,分享STM32F4,F1,F0,H7等库安装包 ST常用产品线: Keil.STBlueNRG-1_DFP.1.2.0.pack (1.45MB) Keil.STBlueNRG-2_DFP.1.0.1.pack (3.95MB) Keil.STM32F0xx_DFP.2.1.0.pack (65.20MB) Keil.STM32F1xx_DFP.2.…

2026/6/30 4:58:20阅读更多 →
基于Qwen2.5-VL与OpenClaw的智能UI自动化测试实践

基于Qwen2.5-VL与OpenClaw的智能UI自动化测试实践

1. 项目概述:当视觉大模型遇上UI自动化测试最近在折腾一个挺有意思的项目,把阿里新出的Qwen2.5-VL-7B视觉语言模型,塞进了OpenClaw这个自动化测试框架里,专门用来做UI验证。这活儿听起来有点跨界,但实际跑起来&#xf…

2026/6/30 4:53:19阅读更多 →
等待唤醒案例分析(线程之间的通信)

等待唤醒案例分析(线程之间的通信)

方法说明void wait()线程等待,等待的过程中线程会释放锁,需要被其他线程调用notify方法将其唤醒,重新抢锁执行,但是并不会重新执行全部代码void notify()线程唤醒,一次唤醒一个等待线程;如果有多条线程等待,则随机唤醒一条等待线程void notifyAll()唤醒所有等待线程…

2026/6/30 5:58:25阅读更多 →
2007-2024年上市公司人工智能投资水平数据+stata代码

2007-2024年上市公司人工智能投资水平数据+stata代码

本数据参考李果(2024)对企业人工智能投资水平指标的衡量和测算的方法,团队依据上市公司财务报告附注信息,采用关键词筛选法,整理形成人工智能投资水平数据整理说明:1.人工智能无形资产投资金额:…

2026/6/30 5:58:25阅读更多 →
青年 | 当代年轻人的「主体性觉醒」,需要一台懂自己的笔记本电脑

青年 | 当代年轻人的「主体性觉醒」,需要一台懂自己的笔记本电脑

你的节奏,何必迁就工具选笔记本这件事,说到底是在选一种相处方式——它能不能跟上你的思路,能不能接住你的习惯,都非常重要。今天小A为大家种草的这台华硕无畏Pro14 2026,或许就是一个把「你怎么用」放在第一位的选择。…

2026/6/30 5:58:25阅读更多 →
Electron 桌面应用如何接入 Microsoft Store 订阅与永久许可证

Electron 桌面应用如何接入 Microsoft Store 订阅与永久许可证

agiCode Desktop 是个 Electron 应用,通过 Microsoft Store 分发。商业化上其实也就两类产品:一类是 Sponsor Plan(赞助者订阅,Store ID 9N0BTGWV23M1),按月、按年续费,像一段需要不断浇水的感情…

2026/6/30 5:58:25阅读更多 →
构建高可用企业微信自动化:we-work-bot轻量级机器人框架的完整解决方案

构建高可用企业微信自动化:we-work-bot轻量级机器人框架的完整解决方案

构建高可用企业微信自动化:we-work-bot轻量级机器人框架的完整解决方案 【免费下载链接】we-work-bot A lite framework for wechat work bot. 轻量级企业微信群聊机器人框架。 项目地址: https://gitcode.com/gh_mirrors/we/we-work-bot 企业微信作为企业级…

2026/6/30 5:58:25阅读更多 →
纠结洛阳床垫谁家性价比高?三个步骤梳理经验

纠结洛阳床垫谁家性价比高?三个步骤梳理经验

买床垫纠结洛阳床垫谁家性价比高怎么办,可通过明确需求、线下体验、核对售后三步筛选出适合选项。 当前洛阳家居市场中,床垫品类覆盖不同材质、价格带与功能定位,产品差异较大,普通消费者缺乏专业判断经验,容易陷入选择…

2026/6/30 5:53:25阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/30 4:03:30阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/30 4:36:27阅读更多 →
为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南

为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南

为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南 【免费下载链接】Destiny-2-Solo-Enabler Repo containing the C# and XAML code for the D2SE program. Included is also the dependency for the program, and image asset. 项目地址: https://gitcode…

2026/6/30 0:02:58阅读更多 →
第六章:PowerPoint 2010 核心功能与实战应用 —— 从入门到精通

第六章:PowerPoint 2010 核心功能与实战应用 —— 从入门到精通

1. PowerPoint 2010基础操作全攻略 刚接触PowerPoint 2010时,很多人会被它复杂的界面吓到。其实只要掌握几个核心区域,就能快速上手。我最开始用PPT时,经常找不到功能按钮在哪,后来发现主要操作都集中在顶部功能区。 工作窗口主要…

2026/6/30 0:02:58阅读更多 →
XGBoost超参数实战:从理论到调优策略

XGBoost超参数实战:从理论到调优策略

1. XGBoost超参数基础认知 第一次接触XGBoost时,我被它那密密麻麻的参数列表吓到了。这感觉就像面对一架波音747的驾驶舱——每个按钮都可能有神奇的效果,但按错了就可能坠机。经过多年实战,我发现其实掌握十几个核心参数就能解决90%的问题。…

2026/6/30 0:02:59阅读更多 →