您想了解有关 DOTS 内部结构的更多信息吗?
我希望你通过寻找答案找到这篇文章的方法。我将快速向您展示如何了解有关 Unity 及其内部结构的更多信息。这是一个很好的灵感来源。作为布雷达应用科技大学的一名游戏开发学生,我可以将研究文件中获得的知识应用到我的 DOTS 项目中,也可以应用到我的 C++ 项目中。从 Unity 源代码中,您可以了解大量面向数据的设计或多线程的一般应用。
我的队友 Menno 在创建native containers的过程中文档停止时,从文件中学到了很多东西!如果你还没有读过,那就去看看吧!自定义原生容器第 1 部分:基础知识 https://dotsplayground.com/2020/03/customnativecontainerpt1/)
从哪儿开始?
每当你有一个Unity项目,并且你可以访问包的源代码。只能访问包的C#前端,不能访问C++设施。DOTS和它的相关包是用HPC#(High-performance C#)Unity的子集写的。这意味着我们可以接触到它的内部结构!
他们会在哪里?
每当我们在Unity中下载一个包的时候,它们都被存储在同一个位置D:\DOTS\Library\PackageCache(用你的项目替换D:\DOTS)。在那里你通常有一个或大或小的软件包列表,这取决于你的项目。
重要的是 DOTS 和 Burst:
- com.unity.burst@*
- com.unity.dots.editor@*
- com.unity.entities@*
- com.unity.jobs@*
- com.unity.collections@* - For NativeContainers
另外也许你想看看:
- com.unity.mathematics@*
- com.unity.physics@*
你能在里面找到什么?
在这些包中,您可以找到 DOTS 的完整源代码,它使您更容易理解或研究事物的实现方式。或者,当没有文档时,您也可以将其用作参考来源。在那里你可以找到像 SIMD 指令这样的宝石。只需检查 com.unity.burst/Runtime/x86/。这将引导您:
如何在里面搜索?
你现在可以争辩说,你可以使用VS并按F12或检查代码来查看DOTS/Burst等的实现?这并不可行,因为我必须告诉你。如果你这样做,你会有这样的结果。
但这是有帮助的,因为这给了我们一个指示,我们可以在哪里找到这个的来源。第一个指示是命名空间。命名空间告诉我们要在哪个包里找。在这个例子中,它将在Unity.Entities中,翻译成com.unity.entities@*。
这将我们引向软件包,然后我们必须进入正确的文件夹。
例如 D:\git\DOTS-Playground\Library\PackageCache\com.unity.entities@0.6.0-preview.24。
现在我可以搜索正确的文件。这是最艰巨的任务。它们并不总是很明显。在这种情况下,它们位于 Unity.Entities\Types 文件夹中。
现在我可以访问源代码:
总结
这是一个学习很多内部知识的好方法。它允许你收集对架构的深刻理解。如果你对更多关于面向数据的设计感兴趣,一般来说,可以看看Richard Fabian的《面向数据的设计》。
很快我将演示这如何帮助我理解关卡流式传输(请参阅这个很棒的视频)以及如何与我的队友 Niels 一起实现重建所有实体缓存功能 https://github.com/Nvs2000)