Unity中使用ECS系统后的一点感想
优点:
-
容易写出质量高的代码, 因为核心的规则就一句话
数据全放在Component, 函数全放在System里 -
更容易搭建复杂系统
-
容易处理多个系统间的关系
oop或ec 系统对象内处理函数面向的是单个对象信息。
而ecs中的system 面对处理的信息是单个或多个相关集合。这样就给需要对整体考虑的功能就非常方便。 -
明确调用入口
相对于oop或ec系统来说, 原来行为绑定在对象内. 有个很重要的问题是谁来调用, 还要为每个这样的对象找到一个调用的入口。
而ECS系统就只要把Component添加到Entity就完成了,要简单不少。
-
-
解决问题方便
通常知道问题出在哪里后只要面对少量的系统代码就可以了, 按照我最近的体验, 就是解决BUG的时候,不太需要考虑到与其他系统之家的关联。按照以前写代码的习惯,还要考虑到这段代码会被什么系统调用。 -
默认性能
这也是Unity鼓吹的, 主要是在PureECS的时候会比较有效, 因为ECS特别在现代硬件中进行优化。
不需要特别的性能优化,默认就可以得到很高的性能。
缺点:
-
阅读复杂系统比较困难
若一个系统又多个System联合实现, 那么要通过代码看清关系会比较困难,解决方式是补充文档。 -
不容易定位问题
System之间交流经常使用Component来实现的,没有原来的事件或函数调用方式可以通过堆栈定位问题。 -
对带有上下文的逻辑处理不是很友好
比如说一个交易,要分好几个步骤, 上下是有关联的。 又比如AI。 解决方式是小范围的逻辑就使用状态机。
复杂的逻辑可以考虑使用协程的方式来做。 -
多个World 好像支持不是很好
没看到对应的例子 -
Unity为ECS系统做了很多定制话的东西
这样要用客户端与服务器逻辑通用就照成了障碍。
网友评论