Dots
多线程式数据导向型技术堆栈,主要由 Jobs、ECS、Burst,这三部分组成。
Job System(编写多线程代码)
ECS(编写高性能代码)
Burst Compliler(编译生成高性能代码)
Debug ECS
先看看Debug工具,从Debug工具看看对象是这么个情况。
很详细。
Demo Examples01
接下来运行 ExamplesScene01 这是一个很常规的操作,按下空格键位实例化10000个球体,并且向屏幕下方移动(反复)。
最终我们看看Profile:
我们可以看到,非常的耗时,在 BehaviourUpdate 里面耗时清晰可见,代码耗时也有35.43的耗时。
Demo Examples02
经过上面 Examples01 我们可以看到常规手段的性能问题,接下来我们把位置的更新计算提交到 作业系统上(Jobs)再看看性能:
很明显,从30+毫秒降低到1毫秒不到,Jobs 和新的数学库 也确实是很给力,但是还有三小段的峰值。
Demo Examples03
接下来我们尝试ECS,不过不知为何,题主在 Unity 2020.1.0f 使用如下代码是无法完成一个游戏对象的创建,可能是API被修改了,也可能是BUG(官方的案例可以创建。所以ECS还是不太熟悉,等后续问题查到了再更新博文)
//无法创建对象的代码,目前没有被标记弃用。
var settings = GameObjectConversionSettings.FromWorld(World.DefaultGameObjectInjectionWorld, null);
var entityFromPrefab = GameObjectConversionUtility.ConvertGameObjectHierarchy(Prefab, settings);
var instance = entityManager.Instantiate(entityFromPrefab);
案例03,代码峰值也在 30+毫秒,这是因为我把游戏对象提到主线程用 Graphics.DrawMesh 来绘制,所以会产生这个问题,如果ECS用正确了,那么应该和案例02一样,三小段峰值应该也会得到改善。
最后贴上案例地址:https://gitee.com/alone_xb/Dots-Demos-Unity2020.1.0f