U9魔兽超级助手(魔兽争霸手机助手)


作者:NGA-lbmgiii

魔兽世界助手的所有技术升级内容之中,最庞大的一项就是如何支持多个资料片。我们知道长久以来许多玩家都在呼吁开发这一功能,今天我们想要分享一下在进行这种大规模技术升级时面临的挑战和做出的决策。


一些历史

魔兽世界助手最初的设计源于对LEG版本的补充支持。在BFA中,我们则优先考虑的是几项主要的后端提升,包括与游戏客户端部分代码的共享,它允许我们利用许多游戏界面现成的特性与工具,在这之前app是无权使用这些内容的。但这样做的代价就是,我们无法构筑出能同时支持多个资料片的架构,因此我们只能将app支持的资料片从LEG切换为BFA。

我们很清楚玩家对于无法使用app访问LEG的内容而感到失望,所以我们承诺在暗影之地中将会支持多个资料片。移动终端设计团队也非常希望能为社区提供他们想要的东西,让LEG的内容回归。

一开始我们简单地讨论了一下是否只支持过往资料片的部分功能,这样是为了最大化我们在暗影之地内容上的工作内容。不过我们很快决定还是要尽可能多的恢复以前的功能。我们知道随着暗影之地的到来,玩家可以使用时空漫游战役在LEG版本升级小号,我们希望能够确保这些玩家在升级过程中也可以拥有完美的移动端体验。

U9魔兽超级助手(魔兽争霸手机助手)

魔兽世界助手将允许玩家切换LEG和BFA的内容,等暗影之地上线后相关的内容也将开放。


不过在现有程序中,仍有一些LEG专属的代码,我们的源码管理中依然存在着LEG相关的资源。这意味着我们在新的多资料片架构的完善测试中必须重复添加LEG内容。虽然需要优化的部分不多,不过这确实意味着我们需要对两个资料片的内容做一些彻底的分割。

创建多资料片架构需要完成以下三个主要内容:

1.app必须清除当前资料片的数据,并向服务器请求新的资料篇内容。

2.我们必须切割各资料片专属的UI代码,以保持功能的独立性。

3.我们必须细分各资料片专属的资源,以优化app的效率。


资料片数据

在最初开发军团助手app时,大多数用于处理app请求的服务器代码是设计来专门返回LEG数据的。当BFA到来时,我们改变了那些代码的功能以返回BFA的数据。然而这一次我们必须为玩家所选的资料片来获取数据,这意味着要遍历所有用于响应移动端请求的服务器功能,并将其改为为接受对应资料片的参数来获取数据。例如,请求随从的数据需要指定随从的类别(是属于LEG版本的随从还是BFA版本的随从),而世界任务数据的请求则要声明包含的地区。

app本身也有很多地方时专门用于支持BFA的功能的。在LEG版本中,app会提示你获取大厅资源。而BFA版本中我们只是在信息提示里面显示了战争资源数量。我们选择在PC客户端中将整个货币系统移植到BFA时设计的新的共享代码架构中,而不再为暗影之地在信息提示里增加更多的货币显示。这意味着每个资料片都可以请求其对应的货币类型,而不必手动指定我们想要显示的货币。

U9魔兽超级助手(魔兽争霸手机助手)

之前版本:app向服务器请求所有货币数目。

U9魔兽超级助手(魔兽争霸手机助手)

新版本:每个资料片请求专属的货币数目,如果你看过任何在暗影之地中涉及货币系统的插件的代码,你会觉得这一段很熟悉。这是因为共享代码的架构使得魔兽世界助手与游戏本体共享了这一部分功能。


用户界面代码

大部分为BFA编写的代码都是在原有的LEG代码之上编写的,这使得辨认哪些代码是真正有用的变得很有挑战性。例如,BFA的追随者列表仍然可以显示装备,只是这个功能被隐藏了。LEG和BFA这两个资料片的相关功能十分相似,所以这不是一个太大的问题。但是随着我们为暗影之地增加新的功能,维持原有的架构是行不通的。如果那些与LEG和BFA共享的代码部分突然需要支持像灵魂羁绊或者盟约这样的内容,这会使得它们变得更加臃肿。

因此,我们仔细地检查了每一处脚本,分辨出哪些功能是共享的,而哪些功能是专属于某个资料片的。我们将资料片专属的代码分割成子类或新的组件。只在父类中保留基本的共享性的功能,然后使用这些子类为每个资料片创建新的游戏对象。尽管它们基于相同的系统,并且共享大部分的功能,但是现在只有在军团任务列表中才存在战友按钮,而暗影之地的冒险列表则可以去掉LEG和BFA的双标签页设计并显示敌人的头像而非任务类型。

U9魔兽超级助手(魔兽争霸手机助手)

U9魔兽超级助手(魔兽争霸手机助手)

你可以比较一下军团任务列表和暗影之地冒险列表的异同。

我们对于暗影之地版app的另一个重要的后台调整是如何生成数据库文件。目前app是适用于PC端相同的管道来构建数据库代码及文件。在判断世界任务归属于哪个地图上,这个设计派上了用场。在最初,app是为每个地图ID使用手动逻辑,当它只需要支持阿古斯和破碎群岛时,这不是太大的问题。然而当我们为BFA增加更多战斗区域时,它立刻就变得有些麻烦了。不再使用这套逻辑后,我们轻松地从UI地图库中读取我们想要的内容,这使得系统完全动态地运作。一大段用于处理三个资料片区域的代码被缩减为一个优美简约的功能,它能自动处理所有世界任务而不需要任何资料片独有的逻辑。


资源文件

我们必须记住,移动端开发和PC端开发最大的区别在于,玩家可能会在蜂窝信号较差的环境下使用app。因此必须确保玩家在各种网络环境下使用时都能够获得良好的体验而非烦躁感。而我们确保这一点的方法是减少玩家使用APP时的必须下载的数据量。

每个资料片都有很多资源文件,它们会迅速累积。从仅支持单一资料片的app摇身变为要支持三个资料片,这意味着app所包含的数据变为原来的三倍。然而许多资源内容都是独属于某一个资料片的,比如高分辨率的世界地图纹理、任务位置背景、随从和敌人的头像等。所以我们决定将每个资料片对应的资源分别打包。这样一来,app只需要将当前资料片的资源加载到内存中,这节约了内存的占用。

我们也很早就决定为每个资料片分割单独的游戏场景,这样就能确保功能的分离。LEG的游戏场景不需要盟约召唤界面,而暗影之地的游戏场景也不需要船队的窗口。和我们对代码所做的改动类似,这将使得我们更容易确定app在给定时间内的运作情况。这种对资源和场景的分割使得每个资料片都是独立的,这也为一些更友好的内容下载选项奠定了基础。

我们希望在玩家需要下载资源文件时有更多的自主性。当你的网络环境稳定时,你可以选择一次性下载所有的数据。或者你也可以推迟下载其他资料片数据的时间以更快地进入app。如果你决定不游玩某一资料片内容,那么你可以选择不下载相关的资源文件。每个资料片包含约30-40M的资源文件,可以跳过的下载量是相当可观的!

U9魔兽超级助手(魔兽争霸手机助手)

分开下载每个资料片意味着更短的下载时间,更快开始使用app!


管道调整

为每个资料片分割资源文件意味着需要更改管道的两个部分:我们的资源管理工具必须知道哪些资源属于哪些资料片,而我们的资源包创建工具需要在最终打包时将这些资源组合在一起。资源管理工具是另一个原本专门用于支持LEG和BFA版本内容的工具,因此我们不得不重写程序,使其不依附于任何资料片。新版本的软件会遍历资料片列表来获取app需要的内容(通过遍历枚举GarrisonType),将每个资料片的资源解压到单独的文件夹中。对于管理工具的修改使得其可以应用于完整的资料片列表,这意味着他可以在未来自动获取任何新加入列表的值。这也使得我们可以更容易地为app增加新的内容而不必更新管理工具。

我们的资源文件在创建和运行时大量运用了Unity的资源包变体功能。这使得app可以自如地处理某个文件包的不同版本,就如同它们是同一个文件包一样。基于管理工具所解压的不同资料片文件夹,文件包生成管道可以为各个资料片创造不同的文件包变体。当你切换资料片时,这些资源包就被交换到运行环境中。因为所有的变体都被视为同一个文件包。举例来说,代码在获取随从头像时,完全不需要关心目前正在加载的是哪一个资料片的随从头像。这使得我们的特性代码不需要关注资源加载和卸载时的具体细节,每一个资料片都可以假装自己是app中唯一存在的资料片。


在暗影之地

无论你是在游玩暗影之地的全新冒险内容,还是在军团版本中升级自己的小号,我们都非常高兴能够让您体验更多的魔兽世界内容。我们希望本文能够为大家对我们所做的工作,以及在设计架构时的一些决策提供一个趣味性的了解。这些架构不仅能支持目前的游戏内容,还将支持魔兽世界未来可能的设计。


免责声明
    以上文章转载自互联网,文章内容仅供参考,不构成建议,也不代表百科学社赞同其观点。如有侵权请联系755934052@qq.com,提供原文链接地址以及资料原创证明,本站将会立即删除

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请通知我们,一经查实,本站将立刻删除。