最近研究了一下ECS,简单记录一下心得体会吧,ECS&DOTS的优点就不说了,主要说心得.

ECS框架主要将系统拆解成3部分.Entity-Component-System.

Entity类似GameObject,但是他不会挂载在正常的场景当中,可以将GameObject转换成Entity,Unity围绕Entity重写了一套系统,基本等于将之前系统里的坐标,图形,物理等都在Entities包里重新实现了一遍,所以要按照之前使用GameObject的用法,直接用代码给Entity添加属性即可.Window-Analysis-Entity Debugger是用来查看世界里的Entity对象的,不过比起直接在场景里面点物体来debug,确实没那么方便了.也可以通过预设来创建Entity,会比用代码方便许多.

Component类似Model,只抽象存储数据结构,不存储具体数据,在代码里添加到Entity上面来给它赋能:)

System用来执行各种逻辑,System里的Update是一直会运行的,且不需要挂载在任何Entity上,也就是说只要世界在运行,所有System脚本都会开始执行,这里可能会是一个容易频繁引起Bug的点.

Jobs,在DOTS中,通常使用Jobs来处理一些大量运行的方法(例如Update,For循环等),这些同类型Jobs,通常放入数组内一次性执行,可以有效提高效率.

后记. 学了几天之后,尝试了一下用DOTS来写新的游戏,本着先整合框架出空包的原则,build了一个集合了DOTS所有库的空包,惊喜地发现Hybrid Renderer,Entities,NetCode,Physics等库在Android il2cpp下必crash,本来以为是我的问题,网上查了一大通都没结果,有人总结过一套严格的版本号对应关系,据说可以用,但是已经没太大兴趣了,然后看到官网论坛说要用来开发手机游戏大概还需要2-5年的时间,难怪都直接从Package Manager中隐藏了.所以,再你妈的见. 之后可以考虑用一下Burst,其他preview的库暂时不考虑使用了.