Unity DOD该如何理解
这期内容当中小编将会给大家带来有关Unity DOD该如何理解,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
什么是DOD
Unity实际上在做的大计划,是一个在程序届流行了一阵子,最近越来越火的概念DOD (Data Oriented Design) 即 面向数据设计. 他是与我们所熟知的OOD (Object Oriented Design) 即面向对象设计相对的概念. 目前的流行程度甚至于你用youtube一搜就会发现:
在截图里第一条搜索结果的Mike Acton大佬,目前正供职于Unity并且正是Unity的DOD改革主导者之一.然后第三条则是大名鼎鼎的吹哥在自己正在设计的新游戏语言开发直播里讲解DOD.虽然我认为还不至于说"OOP已死,DOD永生"这么极端,不过其红火程度可见一斑.
Unity的DOD
说回Unity, 如图,这是摘自Unity at GDC 2018上的一帧Slide, 表达了Unity DOD计划的全貌.其全新的组成部分是从上到下是以下几个:ECS, Job System, HPC#, Burst Compiler.
ECS
实例组件系统,是编程思想的改变,从基于对象的运作,改变为"流水线式运作"(我自己的比喻).虽然显然破坏了"程序对现实的模拟"这样美好的愿望,但是却大大的增强了解耦性,可测性,扩展性.并且天然是以下要描述的几个组件的好伙伴~
Job System
Job System是Unity对CPU多核编程的应用.通过把工作分散到CPU的各个核心上来大大提升运行效率.而ECS跟他之间的搭配则是由于ECS的System部分天然是以批量处理为核心的,因此只要稍加改动,就可以转变为批量的分Job交到多核去处理.实现性能的提升.
HPC#
HPC#(High Perform C#)是Unity开发的一个C#子集,通过抛弃对象,指针,等高级特性,从语言层面加速性能. 截图里没有直接列出这个,但是NativeContainer是HPC#的一环. 而由于ECS本身的去对象化,可见又是天然的好伙伴.
Burst Compiler
这又是Unity自己开发的,一个全新的快速编译器,最重要的是由于不用考虑通用性,仅仅针对Unity,针对游戏,再配合HPC#, 使得性能有了更大的提升.由于牵扯到编译器层面,这个部分我的理解是最薄弱的,如有错误敬请指正.
在官方Unity DOD教程里则给出了经典方式同屏18000单位,DOD方式104000单位的近乎6倍的性能提升.当然我们的实际游戏会基于游戏内容的不同,以及组件的复杂性未必能有这样的极端结果,但我想2-3倍的性能提升还是可以预期的.
学习材料
然后就是最主要的目前阶段如何学习了. 通过这两周的学习,我的认识是:目前的学习材料杂乱无章并且容易过期.原因很简单就是现在都只是在preview阶段,很多东西都在快速变更中,尤其API里,对一个需求还会存在多种实现方式,官方希望在试用者们的反馈下最终再确定到其中一种,因此你现在写的代码和看的教程很可能会很快无效.甚至18年下半年的大会上出现的一些代码标签,都已经和上半年的不一样了. 官方也显然没有精力维护一个系统性的教学.因此我认为我把我现在所学到的材料按照我自己认为合适的学习曲线去归纳一下并且排序列出是非常有必要的.
单元测试
最后说一下单元测试,这个东西在游戏界争议很大,我个人是站在一定要有单元测试这一派的,而Unity官方也是提供全面的单元测试的.因此新的UnityDOD如何进行单元测试,主要的学习来源就是Unity的源码了. 在Package Manager里提供的预览版Entities里有官方自己的单元测试,这就是首要的很好的测试学习来源.再有就是刚才说的Unity Tiny模式项目也有比较全的单元测试.
上述就是小编为大家分享的Unity DOD该如何理解了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。