Unity探路营

【Unity开源项目精选】Entitas:Unity DOTS的

2020-12-21  本文已影响0人  洪智

洪流学堂,让你快人几步。你好,我是你的技术探路者郑洪智,你可以叫我大智。

Entitas

Entitas是Unity官方推出DOTS之前的一个开源ECS框架。不过自从Unity官方启动DOTS以来,Entitas就不再更新了,版本停留在了2019年2月20日发布的1.13.0。

虽然Entitas不再更新了,但是在旧版本的Unity(2019之前)和纯C#环境中还是可以使用的。

源码链接
https://github.com/sschmid/Entitas-CSharp

ECS是什么?

ECS即实体(Entity),组件(Component),系统(System),其中Entity,Component都是纯数据的类,System包含逻辑负责操控他们,这种模式会一定程度上优化我们的代码速度。

这么说好像还是很抽象,那咱们先来说说为什么ECS会很快吧。

为什么ECS性能好?

首先需要补充一些计算机组成原理前置知识。

ECS的数据组织与使用形式

ECS架构在执行逻辑时,只会操作需要操作的数据,而E和C这两者的配合把相关数据紧密的排列在一起,并且通过Fliter组件过滤掉不需要的数据,这样就减少了缺页中断次数,整体上提高了程序效率。

此外现代CPU中的使用数据对齐的先进技术(SIMD,Single Instruction Multiple Data,一条CPU指令多个数据)与这种数据密集的架构相性极好,可以进一步提高性能,但是需要有一定的SIMD编程经验(虽然C#编译器内部本来就有做这种SIMD优化)来处理具体的业务逻辑。

ECS有什么优势

对比传统的面向对象编程,ECS模式无疑更加适合现代CPU架构,因为它可以做到高效的处理数据而不用把多余的数据字段存入宝贵的缓存从而导致多次缺页中断。

举个例子就是传统模式下我们操作Unity对象的Position属性,他会把GameObject所有相关数据都加入缓存,浪费了宝贵的缓存空间。

而如果在ECS模式下,将只会把Position属性集放入内存,节省了缓存空间,也一定程度上减少了缺页频率,即常说的提高缓存命中率。

ECS真有那么神吗

很遗憾,答案是否定的,ECS在正常情景应用下性能和传统模式不分伯仲,有时甚至因为我们额外的管理分类操作而导致反而不如传统模式性能好的情况出现,它只适用于超多对象的统一管理与操作情形,这也是我们经常看到的ECS的Demo很震撼的原因之一了。

并且真正启用ECS还是有一定技术门槛的,需要有一定的SIMD编程经验,才能把良好数据管理的优势进一步的发挥出来。

如果以上链接无法下载或者下载太慢,可以在洪流学堂回复Entitas获取网盘链接。

扩展阅读


我是大智,你的技术探路者,下次见!

别走!点赞收藏哦!

好,你可以走了。

上一篇下一篇

猜你喜欢

热点阅读