Unity DOTS框架学习系列二


前言

本文主要介绍Unity的多线程式数据导向型技术堆栈(DOTS)。将阐述Unity过渡到面向数据的设计方法的动机、与DOTS相关的关键术语和概念,并借助相关用例,对使用DOTS的优势和风险提供一些简明扼要的指导。
在这里插入图片描述


一、使用DOTS存在哪些机会和风险?

在改善Unity项目的绩效方面,DOTS有着巨大的潜力。 但是,在使用DOTS时需要做出一些考量,它们会影响到项目的时间表、预算和开发团队。以下是一些需要与项目优先事项进行比较和对比的事项。这些事项可以归类为风险与机遇。

机遇

改进性能。默认情况下,我们经常使用“性能”一词来描述DOTS。这是什么意思呢?借助面向数据的设计和多线程,DOTS可以显著提升内存、运行时间和电池性能。随着游戏中显示的项目数量不断增加,提高性能的潜力也随之上升。相反,对于项目较少的游戏,您会发现游戏性能的改善程度却不太明显。

码控制。随着项目规模的不断增大,DOTS可以更好地控制代码的复杂性。为DOTS编写的代码通常可以更好地分离关注点。因此,使用DOTS工作时,代码重构、编写单元测试以及在开发人员之间分配工作就变得更加容易。

风险

如果您不熟悉DoD,那么面对DOTS时就会有一个学习曲线。尽管DoD在计算机科学领域有着良好的根基并已存在数年,而且DoD方法与OOP方法也有很大的不同,但DoD本质上并不比OOP复杂。ECS是一种不同于当前Unity MonoBehaviour方法的代码体系架构,因此学习需要一定的时间。目前,我们认为一名普通的Unity专业开发人员平均需要1个月才能熟练使用DOTS。这一准备时间可以被使用DOTS时的代码质量和性能改进所抵消。当然,具体要取决于项目。

有限支持。DOTS当前仅与Unity中一组有限的功能兼容。 最终,DOTS将与Unity的所有功能完全兼容,但我们目前尚无实现完全兼容的时间表。不过,DOTS允许在单个项目中同时使用游戏对象和DOTS,因此您可以将DOTS用于最频繁的处理任务,而将非DOTS Unity用于其余任务。

二、什如何为使用DOTS做准备?

为了过渡到DOTS需要进行学习。如果您不熟悉概念,使用DOTS时就会困难重重。

当前,还没有简单、现成的解决方案来实现DOTS。在开始使用DOTS之前,一定要了解什么是DOTS,同时还要确定哪些方面能为您带来所需的好处。您可能会发现自己只需要转换项目的某些方面即可使用DOTS,或者您可以决定在许多关键领域使用DOTS方法来启动新的项目。

DOTS的准备工作涉及两个方面:学习面向数据的设计,以及学习如何使用API来实现DOTS。

在开始使用DOTS之前,您需要做很多准备工作。

对于所有人:加深对面向数据的编码方法的理解

从面向对象的设计过渡到面向数据的设计与学习新的编程语言或新的编码方式不同。相反,它是一种编码处理方式以及通过代码来构造信息的表示方式的转变。

即使对于经验丰富的开发人员,转向面向数据的思维方式也具有一定的挑战性。这是因为代码设计实践和行为抽象方式已经成为他们的第二天性,必须重新习惯。针对面向数据的方法,您必须以不同的方式来考虑编码,将对象、类和行为简化为它们所需的数据并加以有效地组织,从而将其转换为首先解决您的常见问题。实际上,这并不是一件小事。随着您的进步,它需要您投入时间并专注于理解数据和学习如何使用DOTS来妥善处理数据。

有关DoD的更多信息,请参阅《面向数据的设计》一书以及这里的外部资源列表。

对于程序员:如果您可以编写代码,则可以使用DOTS

面向数据的设计是一种方法,如果您具有扎实的Unity编码背景,那么您要改变的不一定是编码技能,而是如何将其应用于以数据为中心的方法。

为了获得这些性能的提升,需要对Unity中的代码编写方式做出一些重大变革。首先是如何组织数据。为CPU提供干净的线性数据数组以供读取,而不是在计算过程中从内存的多个位置提取数据,这样显然可以提高性能。通过在内存管理中发挥积极作用,可确保以最有效的方式管理内存。Unity的API中添加了一组新工具,可以让您显式、详尽地管理数据布局和内存管理方式。

您无需重写所有代码,而是只重写代码中那些对性能敏感的区域;对于其他部分,则可以继续沿用原来的Unity方式来编写C#代码。

要了解ECS的基础知识,请跟随我们的实体组件系统教程学习。您也可以浏览我们的ECS项目示例。

三、DOTS的未来在哪里?

DOTS代表了Unity的未来。Unity的架构正在朝着全面采用DOTS的方向发展。这个过程是缓慢的,但现在开始了解DOTS,当我们在Unity功能中全面推出DOTS时,过渡起来就会容易得多。

面向数据的设计(DoD)堪称是实时3D行业的未来。利用DoD原理和实现来解决问题并开发复杂的解决方案已成为大势所趋,尤其是在游戏领域。

例如,瑞典游戏工作室Far North Entertainment就使用了DOTS来解决他们的性能问题,相关说明见“Creating a third-person zombie shooter with DOTS”(使用DOTS创建第三人称僵尸扫荡游戏)。
其他游戏引擎(例如Frostbite和Unreal)甚至也在探索DoD的使用。通过将DOTS引入Unity,让AAA游戏开发的最佳实践面向更广泛的受众推广。

据称使用了DoD的非Unity游戏示例包括:暴雪的《守望先锋》和CD Projekt的《巫师3》。
在这里插入图片描述

四、后续步骤

如果您认为自己已经为学习DoD和DOTS做好准备,可以利用Unity提供的许多资源来帮助您入门。

要了解DOTS的技术方面和使用动机,要了解有关DoD的更多信息,可以浏览这里的DoD资源列表及《面向数据的设计》一书。 要了解ECS的基础知识,请跟随我们的实体组件系统教程学习。您还可以浏览我们的ECS项目示例及实体组件系统文档。

为帮助您了解DOTS的实际应用,Unity创建了相应的项目来演示DOTS的强大功能(即Megacity),并提供了DOTS项目示例。您还可以浏览Tiny Racing,它演示了Tiny项目的DOTS实现。


👉壁纸分享
在这里插入图片描述

在这里插入图片描述

总结

您可能会认为自己还没有为DOTS做好准备,并且可能会担心Unity过渡到全面使用DOTS时自己就会落后。Unity已经承诺会在用户需要时仍为非DOTS工作流程提供支持。这样就为您提供了充足的时间来准备DOTS,因为最终我们希望所有用户都能在某个时候过渡到DOTS。
下篇中,将具体讲解如何使用DOTS,让你的项目如鱼得水。
如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢
你的点赞就是对博主的支持,有问题记得留言评论哦!
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒

Unity DOTS(DOTS: Data-Oriented Technology Stack)是Unity的一种数据导向技术堆栈,它旨在提高游戏性能和可扩展性。它基于实体组件系统(Entity-Component-System,ECS)的概念,其中游戏对象被拆分为实体(Entity)和组件(Component),并通过系统(System)进行处理。 在Unity DOTS中,可以使用实体组件系统来管理和处理游戏对象。通过将游戏对象转换为实体和组件的形式,可以实现高效的数据处理和并行计算。例如,在创建实体时,可以使用GameObjectConversionUtility.ConvertGameObjectHierarchy函数将GameObject转换为Entity,并使用IConvertGameObjectToEntity接口进行自定义转换。然后,可以使用系统(System)对实体和组件进行处理,例如旋转方块事件。 Unity DOTS的优势包括更高的性能,更好的可扩展性和更方便的并行计算。通过采用数据导向的设计,可以减少内存访问和数据处理的开销,从而提高游戏的帧率和响应性。 总而言之,Unity DOTS是一种数据导向的技术堆栈,通过实体组件系统和并行计算来提高游戏性能和可扩展性。它可以通过转换游戏对象为实体和组件的形式,并使用系统进行处理来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [UnityDots技术入门](https://blog.csdn.net/m0_37920739/article/details/108181541)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Unity DOTS简明教程](https://blog.csdn.net/mango9126/article/details/105219215)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熬夜敲代码的小N

你的鼓励是对我最大的支持,么么

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值