UnityECS框架项目实战

ECS是什么?它是一种框架,适用于大场景多物体的游戏,比如一些策略游戏,很多的游戏物体,如果是按照平常的做法,那么性能一定会受到影响,那么这时候我们就可以用ECS框架来做。成功的案例就是守望先锋了,它里面就用到过ECS框架。说了这么多,什么是ECS呢?E:entity(实体),C: component(组件),S:system(组件系统)。它是专门用来处理多物体的一种框架。摒弃了传统的monobebaviour的模式,我们用ECS的时候,是根据组件和组件系统来生成实体的。先给大家看下这节做完后的效果吧。

我们通过这张图可以很明显的发现,场景中的物体貌似很多,但是层级面板上并看不到节点存在,这是不是就很奇怪。按道理来说,untiy中的物体都是要依靠节点存在的。那么这就是ECS的奇特之处了。好了,我们接下来看看具体怎么做吧。

首先的话,我们要用ECS来做项目,第一个就是需要用到高一点的版本,也就是要你的unity能下载安装支持ECS的一些插件。我这里用的是2019.1.2的版本,已经是非常的高了。建议大家和我用一样的。有了这个前提过后,我们就按部就班的创建项目,然后保存场景,再就是导入资源包了。我们需要哪些呢?首先ECS的里面有一个world,然后一个ECS项目中可能有多个world,我们需要选择当前世界活跃的world出来,就像有多个场景一样,我现在想打开主场景,那么我就要双击主场景才能进去,是吧。ECS也是差不多的,我们需要选择一个活跃的world,然后world里面就有ECS的管理器,叫做EntityManage也就是实体管理器。那么问题来了,world在哪里呢?所以我们要先导入资源包,这个资源包就是Entities.然后我们就可以开始制作了。

创建一个继承mono的脚本,然后挂载在随便哪个节点上,然后在start中写生成实体的方法,刚才说了原理,我们要生成实体,就先要用实体的类型,也就是你想生成带有什么组件类型的实体。所以第一步还是需要先来做C(component)。当然最先还是要获取entitymanage这个实体管理器,因为给实体创建实体类型需要用到它里面的方法,然后我们就可以添加组件了。比如实体需要被渲染,所以需要rendermesh组件,实体需要位置的变化,那么就需要translation组件。代码如下:

有了实体类型,我们就可以创建实体了。根据实体的类型就可以创建实体了。创建实体过后,由于没有给实体组件各个类型赋值,所以还是看不见,然后就需要给他们赋值。代码如下:

这样的话,我们的实体就有了组件类型,并且赋值了,然后根据类型来生成对应的实体。这样就能在untiy中看见了。这样就有了E和C了,但是我们的实体是没有任何的行为的,这个时候,我们是不是还有一个S没有做,没错。System就是实体的行为,那么比如我这里让所有的实体都朝着自己的前方移动,所以就需要写system了。代码如下:

有了这个东西过后,你就会发现,它会直接调用起来,即使没有人调用它,这是为什么呢?其实这是因为componentsystem里是有一个抽象方法,这个抽象方法内部会自动的调用的。然后每个component里面都有一个entities的对象,它负责调用所有的Entity,让具有相同实体组件的它们的行为起作用,这样的话,就有了我们开头的那个效果了。今天这节是非常简单的ECS的项目,大家有什么不懂的可以来找我要源码,问我。需要素材源码或者有什么不懂的可以点击链接加群来问点击链接加入群聊【cocos/unity交流群】

推荐阅读更多精彩内容