序言
在阅读本篇文章之前,我强烈建议先看看我的上一篇《DOTS的组成部分》,这样有助于你更好地理解与应用DOTS。
学习了DOTS的原理篇,接下来我们就要进入实践篇了,很多小伙伴第一时间都会想DOTS到底能带来多大的性能提升呢?
1. 450W个网格渲染器
2. 10W个不同的音频文件
3. 5K个不同的车辆模型
4. 20W个不同的建筑模型
5. 稳定60FPS
6. 我测试了同屏平均面数80W左右
如果你认为这是PC上的效率那就错了,看看Unity的CTO,在自信的笑容下从容地掏出了自己的iPhone X。(想想以前的手游同屏也就6W面左右,有了DOTS光场景面数将至少提升10倍,这能让以后的游戏质量得到飞速提升。)
没错!是手机上60帧!全场响起了欢呼声。这样的场景如果不是DOTS,别说手机了电脑都跑不了,我相信此时大家已经明白了DOTS的威力了吧。
就目前来说,想要场景转Entity,美术同学第一个就不答应。为了让美术同学方便,Unity开发了游戏对象自动转Entity的方案。就拿这么大的场景来说,美术同学还是愿意用传统游戏对象的方式布置场景。如下图所示,Unity简化了制作流程,如果是Editor模式下运行游戏时自动转Entity,发布真机会在打包时自动转Entity,所以DOTS对美术来说是无感知的。
如下图所示,转换的原理就是将原本的游戏对象和身上挂的组件删掉,将它们转成实体对象和实体组件。
利用Unity多场景的功能,首先将一个非常大的场景分成若干个小场景,Unity会将每个子场景全都转成Entity实体,这样就可以根据角色当前的位置来加载对应场景块,在游戏例子部分我也提供了类似场景切换的游戏Demo。
游戏对象组件和实体对象都不是一个东西,那么Unity是怎么转的呢?如下图所示,其实Unity就是将一些通常的组件进行转换,不过它提供了自定义组件转换的方式,开发者也可以自己写转换规则。
《DOTS深度研究之原理分析篇》(https://edu.uwa4d.com/course-intro/0/158)一文中,我们已经将DOTS的原理部分全部讲完,可能有些同学会感觉比较枯燥,那么这一章开始我们来讲讲实际项目的应用。
文章简介
在《DOTS深度研究之原理分析篇》中,我们详细介绍了DOTS的工作原理,让大家可以深入理解任务系统(Job System)、实体组件系统(ECS)、Burst Compiler编译器的工作方式。虽然DOTS可以大量提升游戏性能,但是如何才能快速且有效地应用在具体项目中呢?有的项目刚立项,也有的项目已经开发了一半,美术是否抵制DOTS的开发流程?诸如此类的问题接踵而至。
Unity引擎为了让传统游戏对象方式转成DOTS的流程已经做了很多努力,但是仍有提升空间。比如,目前摆在实际项目中的两大头号难题,烘焙贴图的应用和DOTS动画系统的应用,这两个问题官方都没有提供直接解决方案,但是可以在本文中找到间接实现的方法。
本篇文章还提供了大量的例子,全面地介绍了如何快速应用DOTS,并且还提供了工程源码方便大家学习与调试。
适合读者
- 对DOTS感兴趣的开发人员
- 想要快速入门及掌握DOTS的技术人员
- 希望将现有游戏转成DOTS的开发人员
你将获得
- DOTS开发核心思路
- 如何有效地将现有游戏转换成DOTS开发
- 课程配套的12个例子工程
详细课程可前往>> https://edu.uwa4d.com/course-intro/1/161 查看。
1.1 Hybrid Renderer
首先,我们需要在PackageManager中下载Hybrid Renderer,它是Unity提供的一套用于DOTS渲染的类库,目前的版本是0.3.3,还处于Preview版本。
再回到开篇我提到的DOTS只是一个快速处理数据的工具,它可以高性能高并行度地让CPU跑满来加速。但是游戏并不仅仅是处理数据,更重要的是需要渲染出来,Hybrid Renderer的出现让我们可以更方便地处理显示。
如若转载,请注明出处:https://www.daxuejiayuan.com/22680.html