DOTS加速移动游戏与开发

How the new Data-Oriented Technology Stack delivers major benefits for Tic Toc Games

Tic Toc:Unity开发人员案例研究

如何在为游戏图形添加大量组件的同时加速开发并改善用户体验?Tic Toc Games利用Unity的高性能数据导向型技术堆栈(DOTS)— 其中包括实体组件系统(ECS)、C#任务系统和Burst编译器 — 在移动设备上实现 60 FPS 性能,同时避免出现电池耗尽或手机过热等情况。

项目

实现面向数据的软件设计方法

目标是

提高多线程性能,降低设备电量需求

平台

iOS、Android、Xbox One、PS4、Steam、Nintendo Wii U eShop

团队成员

约40人,其中5名开发人员使用Unity

地点

加州伯班克

Tic Toc Games是一家提供全方位服务的开发商,拥有经验丰富的美术师、设计师、程序员和产品经理 — 他们都曾推出过荣获奖项的交互产品。他们希望玩家在玩游戏时能够热爱游戏,在不玩的时候能够想到游戏,与朋友分享他们的热情,并一次又一次地回来玩游戏。自2011年开始制作游戏以来,他们便一直在使用Unity。

与所有游戏公司一样,Tic Toc总是在寻找能够从代码中获得更好性能的方法,在设计上能更快实现迭代的方法。Tic Toc的首席程序员Garth Smith说得更优雅:“我们需要更好、更快地制作游戏。”Smith是Unity的长期用户,他发现Unity 2018.x中的部分重要新功能非常强大。

随着几款备受瞩目的解密游戏将于2019年发布,其中包括《Match 3》和《Collapse》, Smith坚定表示他的团队会利用ECS。“使用ECS绝对是异于人们习惯的编码方式,”Smith指出,“学校里不怎么教授数据导向型编程,所以这是一个重大的范式转变。即使对我们来说,尝试新事物也会有一点害怕。”不过,他们利用ECS取得的成就使他们深信不疑。

结果:

  • 在移动设备上实现 60 FPS,且CPU不会过热
  • 测试工作流程更高效
  • 迭代和故障排除/bug修复更少
  • 设备电池使用寿命更长
Tic To采用DOTS

为了实现巨大的性能和生产力提升,Tic Toc应用了Unity全新数据导向型技术堆栈(DOTS)的主要组件,其中包括实体组件系统(ECS)、C#任务系统和Burst编译器。

ECS将关注点从对象转移到数据

ECS用数据导向型方法取代了对象导向型的编码,这种方法更适合制作游戏应用的众多部分。数据导向型方法将数据从处理中分离出来,从而消除了大量的数据分散;实现了真正的多线程处理,因为不再需要按顺序处理事件。

例如,两个实体可能分别为一颗子弹和一个玩家,每个实体引用不同的属性,比如位置、生成和运行状况数据。实体和属性是没有附加功能的纯数据。系统将功能应用到实体,例如为子弹配备运动系统或为玩家配备生成系统。数据与功能的分离让Unity可以创建能够在多个核心上并行处理的任务。据Unity传播内容全球负责人Mike Geig称,“点击后,它可以轻松地吸引你的注意力。”

使用ECS的好处非常显著。编写优化代码因为数据组织方式变得更容易了 — 此即品牌口号,轻松实现高性能。”Smith补充到,“ECS开启的新天地向我们展示了如何实现更好的算法。”此外,ECS代码具备高度可重用性,原型(唯一实体)紧紧地压缩在内存中,而且可能最重要的是,ECS可以利用越来越多的CPU核心。当今,主流CPU最多有4-6个物理核心和8-12个逻辑核心,而“发烧友”CPU最多有16个物理核心和32个逻辑核心。大多数核心未得到使用,但是DOTS充分利用了它们。

观看Mike Geig的实体组件系统(ECS)和C#任务系统简介五部分内容。

携手利用C#任务系统

将团队的数据导向型ECS代码与Unity的C#任务系统相结合,使得Tic Toc可以越来越多地利用多核处理和多线程。编写线程安全的代码非常困难的,因为竞争条件(线程以意外的顺序运行,从而导致意外的结果)会加大限制,而不断切换环境会导致效率低下。

然而,任务系统可以应对上述所有问题,让Tic Toc的开发人员可以专注于与游戏息息相关的代码。Smith说:“任务系统支持我们在多个线程上运行系统,在CPU上使用不同的核心 — 这是我们以前很难做到的。ECS和任务系统让我们可以几乎100%地使用其他核心,这效率简直惊人。”

Burst编译器直接与硬件通信

新的Burst编译器是一种基于LLVM的数学感知编译器技术,能够执行C#任务,可为目标平台的特定功能生成高度优化的机器代码。对于Tic Toc来说,这意味着Smith和他的团队不必花时间重新学习并编写复杂的低级代码来修复性能故障。

“借助Burst编译器,我们可以对使用ECS所做的事情进行假设,这的确能够加快速度。我们发现不会循环会增加约30倍,特别是当循环在一个帧中出现多次后,”Smith说道。

该团队发现,当大型系统进行交互时,Burst编译器可以消除QA中通常必须清除的大量集成错误。补充说:“如果使用Burst编译器,你可以在多个平台上实现手动调整汇编代码的优势,无需承受繁重的工作。”

针对其他工作室的DOTS建议

最初,Tic Toc向数据导向型方法过渡属于试探性尝试,但这是一个有趣的挑战。“一旦掌握了ECS的窍门,它就会相当简单。我认为在这一点上,工作室里的每个人都明白 ,事实上我们都很喜欢它,我们可能会在未来所有的游戏中使用ECS,”Smith谈到。

他还为其他工作室提供了一些可靠的建议。“你不必一开始就‘完全依靠’ECS。大家可以循序渐进,即便是从小的方面入手都会获得很大的性能提升,特别是在代码可重复使用方面。”

此外,Smith建议在投入全面生产之前先做一个原型项目。“试着制作一些简单的游戏,比如《俄罗斯方块》《井字棋》。其实具体做什么不太重要,重点是要利用ECS完成一款游戏,然后才让你的整个团队投入艺术制作等阶段。第一次接触时,你就会学到很多东西。”

最后,Smith对Tic Toc玩家可能期望的内容感到兴奋。“不管屏幕上呈现了什么内容,他们真的会注意到新游戏以接近60 FPS的速度运行时带来的不同感觉和性能。我知道他们一定会喜欢增强的游戏性能和响应能力!”

“Unity的实体组件系统可以提供非常棒的性能,即便你另有所需,它也可以在代码可重性和保障移动设备电池使用寿命方面提供不少好处。”

Garth Smith, Lead Programmer, Tic Toc Games

ECS 用于移动游戏开发的优势

了解为何 ECS 意味着更快的移动游戏开发速度、更少的错误、更长的电池使用寿命等优势。

Listen to DOTS early-adopter Garth Smith share his experience with Unity’s new data-oriented approach.

Tic Toc如何在移动解谜游戏中利用ECS

在洛杉矶Unite大会上,Tic Toc举办了一场名为“我们重视性能”的会议。Garth Smith在会上介绍了ECS如何帮助他们加速迭代,分享了他们利用Unity实体组件系统的一般经验。

轻松实现高性能

借助我们的高性能多线程系统充分利用多核处理器。

We use cookies to ensure that we give you the best experience on our website. Visit our cookie policy page for more information.

明白了