目录
前言DOTS是什么?核心Package游戏功能相关Package谁需要关注DOTS?DOTS可以应用到哪些地方?为什么需要DOTS前言
本文是Metaverse大衍神君的《DOTS之路》系列课程的学习笔记
DOTS是什么?
Data-OrientedTechnologyStack(面向数据的技术栈)
从字面意义上来说DOTS是面向数据的技术栈
实际上Dots是由Unity的五个核心Package组成
它定义了一种全新的Unity代码编写模型
并在这些核心包之外提供了额外的游戏功能相关的Package和工具
是Unity下面向数据设计与编程的一整套解决方案
核心Package
The C# Job System: 提供快速、安全和使用简单的编写多线程方式 The Brust Compiler 优化C#代码的编译器可以编译生成比通过Mono或IL2CPP更快的代码并不止为DOTS而存在,同样可以编译Unity中的任何代码 Unity Mathematic 一套可以在Job System中使用的数学库在Brust编译的代码中是经过特别优化的 Unity Collections 提供常见的集合类型(列表、哈希映射表等)内存分配属于非C#托管类型可以在Brust编译代码中的Job System中使用这些基类类型支持安全检查,有助于他们在Job System中安全使用 Entities(Entity-Component System) Entity对象是比GameObject更轻量、更高效的替代品Entity并不承担任何代码Conpoment只是片段数据集合Entity和Componment都由System对应的代码单元处理游戏功能相关Package
Entities.Graphics(1.0版本之前的Hybird Renderer) 支持URP和HDRP的Entity渲染解决方案并不是为了优化GPU而是优化CPU上的性能而设计的 Netcode 建立在五个核心包上的DOTS网络解决方案提供网络多人服务器功能、客户端预测等相关功能 Physics 建立在五个核心包上的DOTS物理解决方案支持两个后端 Unity Physics(默认) 无状态的确定性物理库适合多人网络游戏 Havok Physics 有状态但不具备确定性的物理库更稳定功能也更强大 Animation(开发中) 支持DOTS的Animation包 Audio(开发中) 支持DOTS的音乐相关包谁需要关注DOTS?
技术负责人 在技术选型与Unity项目中是否使用DOTS的重要决策人 处理游戏逻辑部分的开发人员 需要非常了解DOTS的代码编写与设计方式了解Brust编译的细节 处理网络通信部分的开发人员 需要非常了解DOTS的代码编写与设计方式了解Brust编译的细节 处理动画部分的开发人员 了解动画扩展包的使用 处理物理模拟部分的开发人员 了解物理扩展包的使用 开发工具与工作流相关内容的开发人员技术美术DOTS相关工具与插件的开发人员DOTS可以应用到哪些地方?
具有大世界流式加载的游戏具有复杂的大规模模拟的游戏具有多种网络类型的多人联机游戏具有需要客户端模拟预测的网络游戏,如FPS多线程加载、通讯,以及充分利用多核并行计算的游戏类型
总之,只要是CPU Bound类的游戏都可以考虑用DOTS做并行优化