DOTS笔记一:了解DOTS是什么

DOTS笔记一:了解DOTS是什么

Unity在早些时候就已经推出了DOTS,到现在还只是预览版。说明还是有些功能不完善,但我们还是要去学习一下非常非常非常高效率的DOTS。DOTS其实包含了三个大类,分别是:ECS、JobSystem、Brust编译器

DOTS由Unity意为多线程式数据导向型技术堆栈,看这名字就知道它非常厉害了。首先介绍一下DOTS的实体组件系统(ECS)。ECS其实在很久之前就已经被《守望先锋》制作团队提出。他强调了面向数据而不是面向对象。面向对象在编程中可以解释为一个类里面有属性、方法,他们两者时杂糅在一起的。而ECS则是分开的。实体就可以理解为一个空物体,可以在他身上挂载很多组件,而组件里面都存着数据没有方法。只有系统可以操作数据。

那么使用ECS的最大优点是什么呢?

以前我们通过面向对象操作数据时,需要从内存中获取数据,而这个过程中就会造成缓存未命中(cache miss),每一次cache miss都会花费更多的时间来寻找数据。而ECS的出现就是为了解决这个问题,他把所有数据都放到组件中,再对所有组件做处理,让相同类型的组件在一段连续的内存中,从而使cache miss降到最低。

Unity通过JobSystem利用多核处理器来使游戏运行处理更快。因为在DOTS之前我们都是在主线程里面操作游戏物体,当然我们也可以创建一个线程,然后在这个线程里面处理一些逻辑。但是Unity为了安全所以禁止在其他线程中操作Unity API,所以自己创建线程还是有很大局限性的。现在我们可以通过JobSystem操作Unity API从而让游戏更快。

Burst编译器哟啊和JobSystem一起使用才能发挥到性能极致。经过Burst编译器编译后,可以让c#代码的运行效率比C++还快。

链接:

Unity手游实战:ECS设计思想和Entitas插件

Unity手游实战:逻辑与表现分离以及实战ECS架构和优化

Unity手游实战:浅谈CPU缓存命中和Unity面向数据技术栈(DOTS)

基于DOTS的UI解决方案

ECS简单示例

Unity DOTS技术详解 - 宣雨松

你可能感兴趣的:(DOTS笔记一:了解DOTS是什么)