C#中ECS的探索与发现(一)
ECS从本质上来说是一种设计模式.而不是某个语言的特性 .该系列文章主要是探索ECS在C#中实现时遇到的各种纠结的问题与方案.同时设计一个unity为前端 .net core做服务器的分布式开发框架.但是水平很菜,难免有错.望批评指正,与君共勉. ECS是什么 ECS是Entity Component System的缩写,实例由组件聚合而成.实例本身不包含任何数据,全部的数据都来自它所拥有的组件.也就是说实例有什么数据,取决它有什么组件.系统则是功能的实现.可以理解为系统关注某些组件,当组件存在时.系统将会进行某些操作. 上面的解读来自各种能百度到的文章上讲的.但是我想在这里用一个实际开发的角度去看待ECS. 先举个例子:有一件物品在地上,玩家A拾取这个物品. 按照ECS的做法会给物品挂上一个 "被拾取" 的组件.然后某个 系统 会处理这个组件.他会把所有带着这个组件的物品,根据组件上面描述的拾取者,将这个物品移动至该拾取者的背包中.这里 系统 关注的是 "被拾取"组 件,但是他同时会使用其他 组件 ,比如这里的背包 组件 .任何一个持有 "被拾取" 组件的实例,都会被那个 系统 给处理移动.如果不加控制,你甚至可以将一个NPC或者玩家挂上这个 组件 ,结果就是玩家变成了宠物小精灵. (这个功能可以有) 这显然是不合理.所以你可以将那个物品挂上一个 "可以被拾取" 的组件