主要参考Unity Connect上面的文章,原文链接:
https://connect.unity.com/p/unityecs-yi
按照文章,是创建 100x100 的立方体,以噪声作为Y轴值,进行波浪动作。
测试环境
Unity 2019.4.2f1 (64-bit)
安装最新的Package
测试结果
原始组件模式:15-16fps
ECS+JobSystem:60-70fps
ECS+JobSystem+Burst:120-180fps
本文转自https://blog.csdn.net/cp790621656/article/details/107127880
ECS模式
ECS是一种设计思想,和Unity之前的Component设计模式一样。并不限定在Unity中,任何语言都可以实现ECS模式。
Unity的ECS并不仅仅实现这种模式,在这之后做了CPU缓存优化,提升了CPU缓存填充率,从而命中率提高。
另一方面,使用Struct替代Class,以及Collections扩展包中提供大量Native容器,减少GC。
JobSystem
如果只有ECS,那么并没有想象中的那么好,游戏仍然以单线程运行,现代移动CPU核心多以10计,一直都是一核有难,9核围观。
JoySystem 就是将复杂的运算,分布在不同的CPU核心中。
原始组件模式,在主线程Update更新Cube坐标,其他线程闲置:
开启JobSystem后,任务分配到多个CPU核心:
https://www.thisisgame.com.cn/
Burst编译
Burst编译器,将C#代码转为LLVM中间语言IR代码。然后由LLVM生成高度优化本机代码。
Burst编译器不支持C#中的数学操作,对此Unity提供了额外的Package Mathematics。
雨松在视频直播中提到的一个点是支持了CPU的SIMD指令,将数学计算进行打包。一条汇编指令可以执行4个数学运算,极大降低了CPU占用。所以可以看到开启Burst之后,CPU相较于之前的80%降低到60%。游戏人生
在Profile中也可以直观看到,在一瞬间就完成了运算。
雨松的直播视频:
https://www.bilibili.com/video/av711159137/
测试项目下载
链接:https://pan.baidu.com/s/1jaYUVo1D2uIGc4vFpF0Lsw
提取码:4wj2
什么项目用Dots?
具有大量相同类型运算的项目,例如RTS、SLG、我的世界类型方块沙盒。
Dots这套解决方案,暂时只能对CPU进行优化,GPU方向期待Unity后续计划。
Burst目前还是Preview,正式项目中使用可能会有很多坑,工期赶得话不建议使用。
来源:oschina
链接:https://my.oschina.net/u/4397718/blog/4335369