当前位置: 代码迷 >> 综合 >> Dots Demos by Unity2020.1.0f
  详细解决方案

Dots Demos by Unity2020.1.0f

热度:86   发布时间:2024-02-10 11:38:34.0

Dots


多线程式数据导向型技术堆栈,主要由 Jobs、ECS、Burst,这三部分组成。
Job System(编写多线程代码)
ECS(编写高性能代码)
Burst Compliler(编译生成高性能代码)

Debug ECS


先看看Debug工具,从Debug工具看看对象是这么个情况。
debug
很详细。

Demo Examples01


接下来运行 ExamplesScene01 这是一个很常规的操作,按下空格键位实例化10000个球体,并且向屏幕下方移动(反复)。
最终我们看看Profile:
demo1
我们可以看到,非常的耗时,在 BehaviourUpdate 里面耗时清晰可见,代码耗时也有35.43的耗时。

Demo Examples02


经过上面 Examples01 我们可以看到常规手段的性能问题,接下来我们把位置的更新计算提交到 作业系统上(Jobs)再看看性能:
demo2
很明显,从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);

demo3
案例03,代码峰值也在 30+毫秒,这是因为我把游戏对象提到主线程用 Graphics.DrawMesh 来绘制,所以会产生这个问题,如果ECS用正确了,那么应该和案例02一样,三小段峰值应该也会得到改善。

最后贴上案例地址:https://gitee.com/alone_xb/Dots-Demos-Unity2020.1.0f