上一篇大概讲了ECS的设计思想,有提到优势也有提到劣势,优势是设计层面的,劣势是实现层面的。那么一套好的框架就是要保证如何保持优势的设计,而在实现时规避劣势所带来的问题。
Entitas早于《守望先锋》出现在公众视野,2015年的欧洲Unite大会上,Simon sschmid 分享的演讲《Entity System Architecture with Unity》,然后2016年的 《ECS Architecture with Unity by Example》。除了这两个演讲之外,其他还有很多的资料都存在作者的gitHub上。地址为:Entitas-CSharp。想要深入学习的可以跳到这里去查看资料。
同时Entitas也提供了Store版本的插件,核心内容没有区别,主要是提供了额外的代码生成器,辅助生成各种component代码,传送门在此。
我们的ECS战斗,就是基于这套插件去做的。
Entitas是什么
用官方的话来描述。Entitas是一个超级快速和轻量级的ECS框架,为Unity特殊设计,并且使用C#语言进行开发。内部的缓存性能和组件快速访问速度都是无与伦比,并且它还经过了良好的设计来应对垃圾收集。
在前面的教程里我们引入了Entity-Component-System的概念,那么在这个框架下还要再理解一些概念。不过在理解概念之前,先看一张图:
从这张图里可以看到,首先我们有一个Context(可以理解为一个存放当前Entity的池),然后每一个Entity都携带了很多个Component。Component里存放了所需要的Data。再往下可以看到一个Groups的概念,可以理解为根据不同的筛选需求将entity归属在不同的groups里,主要是方便查找。
但是Group毕竟是一个被动分组的过程,那么在运行时还需要有动态收集的需求,这个时候要用到两个东西一个叫Matcher(匹配器),一个叫Collector(收集器)。下面可以看一下用法:
Group: