前言
在上一篇我们已经成功的配置好本地的环境了,接下来我们来简单的讲解一下ECS。(笔者也是初学者,如果有错误欢迎大家指出)
ECS简介
在写ECS之前我们先了解一下什么是ECS?
ECS是什么?
ECS的缩写就是Entity Component System。对应的就是实例、组件和系统。笔者认为这是和MVC框架类似,虽然作用不是一样的,但是都代表了一种思想。ECS的思想打破了我们面向对象的思想,让我们直接面向数据变成。以往的Unity提供给使用者的都是GameObject,让我们来面向对象思想,但是ECS则是把GameObject拆成了Entity和Component,然后由System再进行同意管理。
为什么使用ECS?
在编写思想上
笔者认为,现在的大部分游戏其实都是数据驱动的游戏,游戏的界面对象其实是给使用者提供的。一个好的程序猿应该做到真正的数据和显示分离,这样不管显示是什么样,数据都可以去应对,但其实这是理想化的,因为显示是很难统一的。
在编写代码上
ECS为我们提供了面向数据编程的结构、强迫使我们数据和显示进行分离,这样虽然编写复杂了一些,但是我们的扩展性和适应性会有很大的提高。
Unity的MonoBehavior的class其实是非常笨重的,里面包含了大量的信息,我们在平时开发中其实用不到那么多信息,在ECS上我们只需要添加上我们需要用到的组件即可。
在内存管里方面
ECS引入了Archetype和Chuck两个概念,Archetype对应的是我们的Component,就是存放我们Entity需要的所有组件,然后多个Archetype会被封装成一个个的Archetype Chuck,然后在内存里按照顺序进行存放,如果一个Chuck存放满了,会在后面内存里创建新的Chuck,这样Component就是在一起的,每次查找Component的时候速度会大大提升。
下面我们来看一看内存结构图:
线程
Unity使用的是单线程,虽然里面会有携程一些,但其根本原理都是单线程,所以并不能完全发挥CPU,ECS引入了多线程的Job system,并且Job System会把Entities分发到CPU的线程上,这样就提高了CPU的利用率。
怎么使用ECS
ECS主要提升的是CPU的性能,并不是所有的项目都适合使用ECS,因为ECS是新的思想,团队开发成本也是有一定提高的,笔者业主要是为了学习了解,拓展一下自己的思路。
接下来笔者会继续学习如何使用ECS。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 841774407@qq.com