欢迎来到死亡维度

嗨,我的名字是Joshua Parker,我是冠军团队的工程师。我帮助创建解锁冠军新功能的系统联盟。虽然我的工作通常专注于我们如何建造一个新冠军,但它也意味着改进旧系统和粉碎技术债务一直以帮助我们的发动机发展,并让我们继续为玩家创造新的令人兴奋的体验。

在本文中,我将描述进入的技术重新加工联盟冠军Mordekaiser.。我们会看看Mordekaiser旧的终极能力以及我们如何进入维度的一些问题,以创造Mordekaiser的新终极 - 死亡领域。


Mordekaiser的终极能力将他和一个选择的敌人传送到一个新的维度。

首先,一点上下文

Mordekaiser的原始终极涉及标志着敌人,如果敌人在标记时死亡,那么授予可控克隆。一个特别受欢迎的Mordekaiser伎俩在龙上铸造了他的终极,并用龙队的龙头延续了中间车道。这种能力导致了奇怪的错误和所有类型的各种问题,因为游戏并没有真正设置以正确捕获和复制其他角色。

您认为Apartments为龙的宠物租金吗?

在规划Mordekaiser返工的同时,我们知道我们必须重新设计他的核心。只是错误定影不会实现我们的主要目标 - 以消除所有冠军,过去和未来的Mordekaiser相关的生产成本。

因为我们想要解决Mordekaiser如何与游戏中的其他冠军互动,我们不得不检查为什么他的能力导致了那些臭名昭着的虫子。让我们来看看Mordekaiser的旧能力努力处理的两个游戏内容的例子。

被动攻击

一系列主要问题来自冠军被动。这些能力经常发生在游戏的背景中 - 他们通常不需要被激活,但它们塑造了冠军与其他玩家或环境的互动方式。

一个很好的例子是jhin。他设计有四次自动攻击,他的被动保证他的第四次射击令人挑剔。

这里的问题是Mordekaiser会捕捉敌人在一个明显的时刻。因此,当Mordekaiser将在jhin施放他的终极时,他会捕获Jhin的当前状态,这意味着Jhin Clone会因为每个汽车攻击而陷入困境的第四次射击。

克隆的问题

还有一些奇怪的加载问题导致Mordekaiser错误。当播放器启动与Mordekaiser的游戏开始游戏时,服务器将加载额外的内容,因此它将能够制作其他冠军的副本。但是,如果Mordekaiser在不是那样的冠军上使用他的终极应该有克隆?

灰魄例如,旨在有一个克隆 - 所以他的整个套件了解他的多个版本时会发生什么。但是涉及其他冠军谁没有构建以与自己的多个版本互动?这似乎很小,但乘以游戏中的每个冠军,你最终得到了很快失控的广泛问题。

Mordekaiser后的每一个冠军都必须调整,以便他们可以在功能上变成克隆。这将是所有未来冠军发展的巨大负担。

偷看设计

在Mordekaiser的更新中有一个时间,我们考虑将鬼克隆从他的最终能力恢复来看。但是,我们决定不愿意因为它不觉得Mordekaiser应该是谁。

他早期的游戏在克隆大部分工作中扎根于法术铸造中。这并不与试图填充他的亡灵王国的亡灵装甲骑士国王的幻想。当你看到一个带有一个巨大的狼人的家伙时,你希望他打梅斯的人。我们确实最终通过给予新的Mordekaiser在1V1战斗期间窃取另一名球员的统计纪录时,为新的Mordekaiser提供了古老的鬼魂的敬意。

有趣的事实:如果你在一个模式中播放我们的全部并选择MODEEKAISER,当你互相溃烂时,你们都会在同一个领域结束。

嘿,你是怎么来到这里的?

Mordekaiser Reforged.

在发展开始时,我们提出了Mordekaiser死亡领域的原型。尽管它首先工作,但我们知道它基于它的技术不会因服务器带宽而扩大。亚搏网站这是因为它依赖于我们的关系技术,它描述了两个单位之间的游戏关系。

这是不可提供的,因为:

  • 关系是两个单位之间集合的合同,但是当创建一个新的单位时,它需要一个新的合同。这意味着不断检查服务器以用于创建和设置这些关系的新事物,这些关系创建了笨重的代码来维护。

  • 为游戏中的每个单元设置每个单位的每个关系,从转换到死亡维度的两个冠军都引起了初始服务器挂钩。这对所有玩家的降级的游戏表现,我们不愿意接受。

我们不得不从头开始,并建立一个基础的东西联盟这将封装所有冠军和系统,过去和未来。

这意味着我们必须向游戏的新概念引入。通过给游戏来了解尺寸的语言,我们能够建立现有基本维度(召唤者的裂缝)和其他维度之间的差异......像Mordekaiser的幽灵般的可怕死亡领域。

现在这是一个美学。

视力

我们的视觉系统非常复杂,因为愿景是游戏基本战略经验的基本一部分。联盟是一场愿景 - 知道敌方单位的位置使玩家能够做出匹配生命周期的关键的决定。视觉系统很早就建造联盟在其开发生命周期,并拥有如此多的游戏系统,内置于它的顶部,开始扭转旋钮和推动按钮并不容易。

我们知道我们不得不利用视力制度来实现一个经验,使得Mordekaiser的终极感受完全孤立的群体。这意味着我们必须在最低的游戏级别进行更改,其中定义了愿景。是时候开始用GameObjects进行修补了。

对象的层次结构

亚博论坛游戏在其核心处具有层次结构,最低级别对象确定了游戏需求的每个基本功能,并且划分路径都会增加详细信息和功能。在联盟,我们使用GameObjects作为我们最基本的构建块,这些分支到攻击单位(冠军,奴才,塔楼)和不基格的单位(效果发射器,草)。

我所做的第一个更改很简单 - 在建立维度的所有GameObject上添加一个值。我首先将此设置为“默认”,并在预生产的第2周的一段时间内检查它。这实际上并没有影响玩家方面的任何东西,因为它们只与一个维度互动,但它给了我们语言开始定义它在维度时意味着什么不是默认。

一旦完成,我必须开始挖掘弥补互动的问题。当两个物体相互互动时,他们会下降一个问题:我与你碰撞吗?我见过你吗?我可以伤害你吗?在这些地方,我添加了另一个问题 - 你在哪个维度?此问题的答案将确定对象是否会继续立即继续列表或结束互动。准确回答这些问题 - 尤其是维度一维对象需要考虑,如果他们可以“网”彼此可以。

病房在地图的一个地区提供了盟友参与者的可见性。

净可见性

联盟“净可见性”的概念确定了网络数据包是否在玩家之间共享。如果播放器A在其计算机上移动,则将这些数据包发送到服务器。如果玩家B能够在其地图上看到它们,则服务器将播放器的数据包发送到移动。换句话说,服务器是唯一知道每个人都在哪里和谁在移动的位置。

在后端,我们认为愿景作为地区 - 想象他们喜欢我们在GameObjects上的泡沫。这些气泡倾向于是圆圈,但实际上可以是任何形状。如果我们将视觉区域泡沫放过一个对象,它开始接收数据包并将其发送回他们的审美团队(所有盟友单位)。例如,奴才都有附着在它们的视觉区域,这就是为什么玩家能够看到地图的地图的部分所在的原因。

为了清楚起见,这里在这里采取了一点创造性的自由,这些不是实际的视力泡沫。

Vision系统具有一组规则,可以确定游戏中的哪些操作的影响哪些字符。Net-可见性系统利用Vision系统的规则来确定是否发送或未发送数据包。例如,如果玩家处于死亡维度和奴才在附近的任何其他维度中死亡,那么球员仍然获得经验(因为经验忽略了视觉规则)。

导弹系统根据情况决定是否遵循这些规则。因此,如果一个导弹在一个维度中创建,我们必须让它决定它是否应该与另一个维度的玩家互动。

导弹

导弹喜欢打东西。当有多个维度时,确定这些命中变得复杂。导弹的来源需要清楚,我们需要知道它存在哪些维度 - 如果施法者交换尺寸,它应该去的位置。建立准确的导弹来源 - 因此法术 - 帮助我们避免通过使其所在的服务器清楚的服务器来避免对玩家混淆的情况。

这很困难,因为它需要在咒语真正结束时理解,这可能是模糊的。

例如,考虑以下情况。球员们施放了一个咒语,它创造了一个牛奶,召唤了一个梅西昂,这击中了一个导弹法术,击中了某人并召唤施放法术的其他仆从。原始法术什么时候实际结束?

追踪咒语的原始源的标记系统称为“维度源上下文”。这是一种数据,当一个咒语被投射时收集的数据是捕获导弹的捕获以及它创建的维度。当咒语通过其生命周期时,它可以始终引用此面包屑,以了解它开始的哪个维度。这个allows the spell to make decisions around when it should follow a player when they switch dimensions, and when it shouldn’t.

例1:跟随

对于这个例子,我们将使用冠军卢西安和他的最终能力。

卢西安的终极能力是一系列射击他面对的方向。这些是每个单独的导弹,因为它们看起来像是来自他的枪,他们需要遵循他去的地方。即使能力持续了几秒钟,如果露天将转换尺寸,他的终极应该跟随他,因为这就是玩家的期望。

例2:别关注

现在让我们来看看能力不应该遵循维度变化 -Ziggs.炸弹。

每枚炸弹反弹都是一个单独的导弹。对于每次反弹,游戏决定了导弹是否打到任何人,如果它没有,它会给下一个反弹施放另一个导弹。如果维度源直接绑在炸弹反弹中间的施法者和Ziggs切换尺寸,我们希望炸弹留在后面。否则,炸弹将在没有警告的新维度开始弹跳,这可能会破坏游戏的完整性。

一旦我们具备维度来源系统到位,我们必须决定如何在游戏中的每个冠军上实施。

冠军

根据写入它们的设计者,类似的法术可以以不同的方式脚本。这意味着对所有法术/导弹/冠军的所有解决方案都没有一个捕获的解决方案,因为需要单独检查的东西以确定最佳的维度切换行为。

我们通过在以下情况下铸造所有法术,导弹,能力和项目效果来完成整个游戏的粒度扫描:

  • 当球员转变为死亡维度时

  • 当玩家处于死亡维度时

  • 当玩家从死亡维度过渡时

这很快明确表示我们必须制作具有关于会有什么规则的桶和何种问题。

例如,如果玩家在地面上留下某种陷阱,那么不应该突然切换尺寸。在这篇文章的开始时仔细观察GIF - 当他切换领域时,地面上的陷阱不会与Mordekaiser过渡。

如果他们有某种宠物怎么办?

这种金属球不像我朋友的小狗那么可爱。

我们的策略涉及创建基于80%VS 20%的分类的桶。我们创建解决80%问题的规则,最后20%是特殊情况。这样做允许我们与解决方案保持高效且符合,而不是将每个项目视为需要单独解决的单个案例。

这意味着确定真正的法术来源。上面描述的维度来源上下文系统有助于我们解决特别复杂的情况,并且在触发区域的情况下特别有用。

示例:触发区域

触发区域类似于视觉,但值得注意的是 - 物体或法术的碰撞是由撞击的半径确定的。但这些触发区域如何与死亡维度进行交互?我们如何知道他们的真实来源是什么,以及他们应该影响游戏玩法的地方?

触发区的一个例子是Yasuo的挡风墙。

这种墙壁阻挡导弹继续在他们的道路上,但是当风墙上了解触发区域时,它不明白尺寸。如果在播放器过渡到新尺寸之前被施放了风墙,它仍将阻止死亡维度中的导弹,即使它真的只存在于默认维度中。这意味着需要了解维度所需的触发区域。

为此,我们给出了触发区域自己的尺寸来源上下文。这允许它们跟踪它们应该在其寿命的过程中与哪个维度进行交互,因此决定何时切换尺寸以及何时保持后面。

可扩展系统+下一步是什么

在制定死亡维度的同时,我们考虑了很多关于它如何影响未来冠军和游戏,以及潜在的新游戏模式。我们希望创建一个可扩展和可用于未来开发人员的系统,我们希望避免任何将为新内容增加大量生产成本的任何东西。

新冠军

冠军法术和项目以一种名为BlockBuilder的语言编写脚本,它通过串串块创建复杂的行为。解决未来的冠军相对简单,我们只需要在BlockBuilder中创建工具以支持更改尺寸。其中一个工具是一个名为OnDimensionChange的事件,允许脚本对维度更改作出反应。然后,脚本可以决定是否要响应维度更改来做点什么。

如上一节所述,这可以是:

  • 没做什么

  • 与脚轮过渡

构建可扩展系统

现在,我们有三个维度联盟默认,这是基本地图,死亡领域,这是Mordekaiser的最终能力,所有领域。所有领域都是在我们想要对象的情况下专门使用的专门系统忽视维度规则。像Nexus(团队基数)这样的建筑物需要在所有维度中存在。

所有领域

这是一个战略局面的一个例子,帮助我们决定建筑物等物体的所有领域。如果一个Mordekaiser球员试图摧毁敌人的Nexus,但整个敌人的队伍都在那里,他能够通过铸造他的终极来转向死亡领域,说,这是一个弱者的球员。现在,他能够在他的维度中只能击中敌人的基础,因此能够阻止他。

未来尺寸

现在我们已经在确定所有字符,法术,导弹和对象的维度系统周围完成了腿部,因此未来的工程师可以使系统可扩展。在这个新世界,我们可以做一次产生多维尺寸的游戏模式,以实现更复杂的播放器和NPC遭遇。

添加新维度将意味着将更多内容直接添加到我们的数据中,因此它在骚乱编辑器内是可见的。如果我们这样做,设计人员将简单地通过使用字符串散列快速添加多个维度。该维度系统的成熟将意味着创建一个在编辑器中生存的数据包,并在调用时应用尺寸的正确数据。

通过与MORDEKAISER开始这项工作,我们已经使这些可能性更加可访问。创造新尺寸不仅令人兴奋的是Mordekaiser的能力,而且令人难以置信联盟。

谢谢阅读!如果您有任何疑问或想告诉我关于您所看到的狂野Mordekaiser错误,请评论以下。

发表于约书亚帕克