来自:

Unity DOD (ECS) 基础概念与资料汇总 | indienova 独立游戏

引言

我不会提及技术细节,只是对现有的学习资料进行一个简介,给出我认为合理的学习顺序,我觉得比起用我自己蹩脚的语言复述教学,这些才是更有用的东西。

但是一定要注意 DOD 的各个组件会在2019年的一年时间内才会逐渐稳定发布。如果你手头就有紧迫上线的项目的话,还是不要急于应用。

首先,你可能一脸懵逼的问”DOD”是啥,你不是说要学 ECS 么。 事实上这正是我觉得有必要总结的一个原因。 当我刚开始研究的时候我还只认识到 Unity 在强推新的 ECS (Entity Component System) 即实例组件系统。我把它视为跟我正在用的 Entitas 类似的 ECS 框架而已。虽然当时我已经知道 Job System 和 Burst Compiler,但是我并没有意识到三者之间的联系是多么紧密。

什么是 DOD

Unity 实际上在做的大计划,是一个在程序届流行了一阵子,最近越来越火的概念 DOD (Data Oriented Design) 即 面向数据设计。他是与我们所熟知的 OOD (Object Oriented Design) 即面向对象设计相对的概念。目前的流行程度甚至于你用 youtube 一搜就会发现:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c8f55211-2048-471d-a9c5-cf40328a94d1/Untitled.png

https://www.youtube.com/results?search_query=data+oriented+design

在截图里第一条搜索结果的 Mike Acton 大佬,目前正供职于 Unity 并且正是 Unity 的 DOD 改革主导者之一.然后第三条则是大名鼎鼎的吹哥在自己正在设计的新游戏语言开发直播里讲解 DOD。虽然我认为还不至于说”OOP 已死,DOD 永生”这么极端,不过其红火程度可见一斑。

Unity 的 DOD

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3f7a6520-dcf8-4d2d-97fb-6d5573623139/Untitled.png

Unity at GDC - C# to Machine Code

说回 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#