工程师工作坊:WoW同伴

工程师工作坊

我们在《魔兽世界》同伴应用程序中进行的最重要的技术改进之一 影子大地 它与不同扩展的兼容性。 我们知道这是许多参与者所要求的功能,而今天我们想谈一谈进行这种大规模技术变革所涉及的挑战和决​​策。

小德历史

WoW Companion应用程序最初是为特定扩展而设计的: 军团。 面对 艾泽拉斯之战,我们决定优先考虑以下方面的重大改进: 后端,例如应用程序可能与PC客户端共享代码的可能性,这使我们能够利用应用程序以前没有的主要游戏的用户界面(UI)中提供的许多功能和工具。使用权。 缺点是我们无法构建必要的基础架构来同时支持多个扩展,因此不再支持该应用程序 军团 并且碰巧只能在最新的扩展中使用, 艾泽拉斯之战.

我们知道,游戏迷对于无法访问以下内容感到失望 军团 更改后,因此 影子大地 我们致力于同时支持多个扩展。 此外,行动小组急于向社区提供他们想要的东西,并恢复其中的内容。 军团.

在一段时间内,我们正在考虑仅提供先前扩展的部分功能以完全致力于内容的选择。 影子大地,但我们很快决定,我们想要的是恢复所有可能的功能。 我们也知道随着 影子大地,玩家可以选择通过以下方式升级其备用角色 军团 通过Timewalking Campaigns,我们希望确保这些玩家在升级时具有完全的移动兼容性。

工程师工作坊

魔兽伙伴应用程序将允许玩家选择 军团 y 艾泽拉斯之战 从初步补丁 影子大地,以及的内容 影子大地 随扩展版本一起提供。

事实证明,这样做或多或少是一个优势,其中的大多数代码 军团 仍然存在于应用程序中,并且我们仍然有来自的原始文件 军团 在源代码的控制下,使内容的重新合并 军团 对于我们新的多扩展基础架构而言,这是完美的测试。 尽管实施的余地不多,但仍需要做一些工作来分离 军团 y 艾泽拉斯之战.

创建多扩展基础结构需要三个主要元素:

  1. 应用程序必须清除活动扩展的内容数据,并从服务器请求新扩展的数据。
  2. 您必须将每个扩展的UI代码分开以隔离功能。
  3. 每个扩展的文件都必须分开,以最大程度地减少应用程序资源的使用。

扩展数据

最初开发Legion Companion应用程序时,大多数处理应用程序请求的服务器代码都设计为仅返回来自 军团。 当时间到了 艾泽拉斯之战,我们更改了这些函数以从中返回数据 艾泽拉斯之战。 这次,我们不得不从 任何 选定的扩展,其中涉及查看对漫游者请求做出响应的所有服务器角色,并将其更改为接受指定用于从中检索数据的扩展的参数。 例如,要求指定特定类型的关注者(以下对象的关注者)的关注者数据请求 军团 或以下的追随者 艾泽拉斯之战)以及所需的世界任务请求,以包括您想要任务数据的区域。

该应用程序本身还包含一些内容,这些内容已明确扩展为与 艾泽拉斯之战。 在 军团,应用程序请求总部的资源; 上 艾泽拉斯之战我们只需要在该消息中增加战争资源即可。 而不是继续在同一消息中添加更多硬币 影子大地,我们选择将整个硬币系统从PC客户端转移到开发用于 艾泽拉斯之战。 这样,现在所有扩展都可以自动请求其货币,而不必手动指定我们想要的货币。

先查询货币数据

之前:应用程序从服务器请求了特定的硬币。
备用图片名称

之后:每个扩展都可以请求自己的硬币。 如果您查看以下代码,可能会对您熟悉此代码 插件 在其中使用货币系统 影子大地。 这是由于代码共享基础结构允许《魔兽世界》同伴应用与主游戏共享功能。

UI代码

创建的许多代码都是为了与 艾泽拉斯之战 是根据的现有代码制作的 军团,这使得辨别哪些代码处于活动状态变得困难。 例如,以下对象的关注者列表 艾泽拉斯之战 他仍然可以展示武器; 但是,武器按钮是隐藏的,因此不需要代码。 中的功能 军团艾泽拉斯之战 足够相似,这没什么大不了的,但是我们知道,有了 影子大地,维持这种类型的架构将不可行。 如果突然之间, 军团 y 艾泽拉斯之战 它必须与诸如灵魂联系和古玩之类的东西兼容,否则事情将变得更加困难。

所以我们检查每个 脚本 找出共享的功能以及特定于扩展的功能。 我们将每个扩展的特定代码分为子类或全新组件,仅将共享的基本功能保留在较高的类中,并使用这些新的子类为每个扩展创建新的游戏对象。 现在,尽管它们由同一个系统支持并共享其大部分功能,但它们的任务清单 军团 它是唯一一个需要“战斗同盟”按钮以及“冒险”列表的按钮 影子大地 您可以做一些事情,例如摆脱他们使用的两标签式布局 军团 y 艾泽拉斯之战 并显示敌人肖像而不是任务类型图标。

工程师工作坊

任务清单之间的比较 军团 以及的冒险清单 影子大地.

我们在应用程序中实现了另一个重大的幕后更改, 影子大地 这是我们生成数据库文件的方式; 现在,WoW Companion使用与PC上相同的过程来构建其数据库代码和数据文件。 其中一个有用的地方是确定每个世界任务在哪个地图上显示的代码。 最初,该应用使用手动逻辑为每个地图ID做出了这一决定,当它只需要与Argus和Broken Isles一起工作时就不成问题。 但是,随着我们向 艾泽拉斯之战,一切都变得比较麻烦。 而不是保留此代码 影子大地,我们能够实现使系统完全动态所需的UI映射数据库表,将用于三个扩展区域的代码的很大一部分转换为单个功能,该功能可以自动完成以下任务:而不遵循每个扩展的特定逻辑。

资源文件

移动开发与PC开发之间的重要区别在于,在移动上,我们必须牢记游戏玩家可以通过数据有限或连接弱的连接访问应用程序。 我们需要确保玩家在使用应用程序时有一个愉快的时光,而不会受到挫败,无论他们是否与Internet连接,而做到这一点的方法之一就是限制使用该应用程序必须下载的数据量。

每个扩展都有一堆资源文件,这些文件可以非常迅速地累积,而在 军团 y 艾泽拉斯之战 到三个扩展 影子大地 这意味着应用程序将需要三倍于数据的数据。 但是,许多文件仅由一个扩展程序使用,例如高分辨率的世界地图纹理,任务位置背景或追随者和敌人的画像,因此我们决定将每个扩展文件都分为不同的文件包。 这样,应用程序仅需要将活动扩展使用的文件加载到内存中,从而减少了应用程序使用的扩展。

我们还很早就决定根据每个扩展程序的需求对每个扩展进行划分,这使我们能够在扩展功能之间保持清晰的区分。 的球员 军团 不需要古玩和 影子大地 他们没有部队派遣窗口。 就像我们对代码所做的更改一样,这使得在任何给定时间了解应用程序中发生的事情变得容易得多。 通过这种方式将文件和社区分开,意味着每个扩展都是独立的,为更具描述性的下载选项铺平了道路。

我们希望为玩家下载应用程序文件时提供更多控制权。 您可以选择在连接稳定后立即下载所有内容,或者稍后再从其余扩展中下载文件,以便可以更早使用该应用程序。 而且,如果您不想与特定扩展进行交互,则不必下载其文件。 每个扩展占用大约30或40 MB,因此您可以跳过下载大量数据!

工程师工作坊

通过分离每个扩展,您可以缩短下载时间,因此可以更早开始播放!

过程中的变化

将文件与每个扩展分开需要对流程的两个元素进行更改:归档保存工具必须知道哪些文件属于每个扩展,而归档包创建工具必须在形成最终包时将这些文件分组在一起。 文件保存工具是我们专门设计的另一个方面 军团 然后, 艾泽拉斯之战,因此我们必须重写它才能使其与其他扩展一起使用。 该工具的新版本检查了扩展列表,其中包含WoW Companion可能感兴趣的内容(通过遍历GarrisonType枚举),并在不同文件夹中为每个扩展生成文件。 修改保留工具以使其使用完整的扩展列表也意味着将来它将自动使用添加到该列表的值,从而无需更新工具即可为应用程序实现新内容的实现。

资源文件的创建和运行时加载大量使用Unity的AssetBundle变体,该变体允许应用程序将包文件的不同版本视为一个包。 包创建过程会基于保存工具生成的每个扩展的特定文件夹,为每个扩展生成每个包的不同变体。 当您在应用程序中切换扩展时,这些文件包将在运行时交换。 由于可以对包的所有变体进行相同处理,因此,例如,用于检索粉丝肖像的代码可以这样做,而不必担心当前加载的特定粉丝肖像集。 因此,该代码没有关注上传和下载文件的基础。 每个扩展都可以像它是应用程序的唯一扩展一样运行。

到暗影之地

无论您玩的是 影子大地 就像您通过升级某个备用角色一样 军团,我们非常高兴为您提供更多移动内容 魔兽世界。 我们希望本文能使您了解我们所做的工作以及在设计不仅与当前内容兼容而且与将来实现的内容兼容的基础架构时所做出的一些决策。 魔兽世界.


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。