格斗游戏Shadow Fight 3中的人工智能



游戏设计师经常面临创建有趣的AI的挑战。 此过程可能相对简单,也可能非常复杂,具体取决于项目的需求和您追求的目标。 Banzai Games高级游戏设计师Mikhail Dragovalovskiy讲述了他在流行的移动格斗游戏Shadow Fight 3中从事AI工作的经验。

SF3和大多数格斗游戏之间的区别


影子格斗系列随即创建,具有许多功能,使其与许多格斗游戏有所区别:

  • 自动阻止的存在。 如果角色只是移动而不攻击,则他会自动阻止敌人的任何普通攻击;
  • 较慢的节奏和动画。 押注战术部分:玩家必须有时间了解敌人施加的打击以及选择哪种攻击才能成功进行反击。 这使我们有机会让玩家考虑我们尝试制作的动画,使其尽可能美丽和真实。
  • 诚实的碰撞。 这创造了一个非常酷的情况,其中一个角色逃避了第二个角色的攻击并做出了反应,而由于流畅的动画,玩家设法考虑了所有问题。
  • 阴影形状。 填充特殊比例后,玩家可以输入阴影形式并花费一些壮观的技巧来突破对手的障碍

图片

系列中以前的游戏中的AI


我们已经在之前的格斗游戏Shadow Fight 2中开发了AI,但是由于过渡到3D,出现了玩家之间的碰撞以及添加了阴影形状,我们只能转移部分AI逻辑,而其余部分则必须重新创建。

从哪里开始从事AI工作?


如果您不使用机器学习制作机器人,那么我将列举两种方法:

  1. 制作一个弱小的机器人,然后使用新功能将其增​​强到所需的水平;
  2. 做一个无敌的机器人,然后削弱它。

第二种选择听起来很浪漫:您似乎比每个人都聪明,并且制作了一个酷炫的AI,可以使玩家弯曲,然后大幅度降低机器人的复杂性。 从开发的角度来看,这可能更方便,因为 您可以预先考虑机器人行为的所有功能,并充分想象机器人的最终行为。

当然,我们选择了此选项,尽管后来我们意识到一切并非如此简单:通过动画,自动块和各种技能的平衡,您几乎总能找到必要的策略和滥用方式,使您能够以高技能击败AI。 我们并不能立即理解这一点,只有当我们正确地衡量了游戏不同阶段的玩家获胜率时,我们才能理解。 尽管事实上,对于许多人来说,从对游戏的反馈来看,该机器人确实是无敌的。

图片

我们的AI如何运作?


触发因素或行为准则

  • 它基于机器人执行随机动作的规则。 我们称这种规则触发系统。 例如:
  • 机器人会查看自身与玩家之间的距离,并仅选择其可以命中的命中,然后从这些命中中随机提供一个。
  • 该漫游器不会使用投掷武器来发送垃圾邮件;
  • 机器人带着投掷敌人的武器进入前额,然后开始保证逃避一段时间。
  • 还有一堆机器人应该做或不应该做的事情...

如果您以相同的抽水水平对初学者释放这样的机器人,则结果将取决于对手装备的武器。 谁比动画快,他就会赢。 因为实际上,这两个按钮都按了所有按钮,除了机器人更有意义了。

图片

决策制定

改善AI的合乎逻辑的步骤是减少随机性并添加决策系统,以使机器人取得胜利。 为此,您需要了解哪种决定在哪种情况下是正确的。 为了打架,总是有两种情况发生:

  1. 敌人在等待;
  2. 敌人在进攻。

也有两种解决方案:

  1. 保证击中时需要打;
  2. 当他们打你时,你需要阻挡,你不能反击。

事实证明,为了取得胜利,人工智能必须以反击打断敌人的进攻,或者在无法打断敌人的情况下将其阻挡。

图片

我们做出了机器人决定的两组决定:一组-如果敌人站着,另一组-如果敌人在攻击。 为了让AI确切知道要对付什么,我们提出了碰撞表。

碰撞表

还记得Strange医生如何看待与Thanos战斗的所有可能结果吗? 同样,碰撞表的工作方式如下:计算机会在每个可能的距离处预先计算游戏中每个进攻动画的结果。

更详细地讲:我们用剑一拳,同时用武士刀一拳,然后我们看看谁会打谁。 我们在游戏中的所有笔触,距离和距离上都执行此过程,并延迟了不同的帧数(我用剑一击,敌人通过N帧发动了打击-武士刀一击)。 所有结果均记录在表格中。 我们在每次更新之前都执行类似的步骤,并将生成的文件经过困难的压缩算法后以最终形式放入构建中,以免在运行时耗尽设备资源。 客户中的玩家已经有了所有结果的列表,这意味着AI知道哪个击中可以抵消玩家在特定距离处的任何击中,或者知道现在最好的方法是阻止攻击。

图片

结果,AI有效地响应了玩家的行为。 也就是说,他们抵抗了反击。 现在,您需要教机器人以最佳方式进行攻击,而不是随机命中。

距离的选择和正确的打击

细心而又聪明的读者会说:“停止! 如果敌人始终在自动封锁中,为什么还要攻击自己呢? 我们必须等待敌人的打击,并迅速打击他,这将打断他的进攻!” 是的,它确实是,但是如果没有玩家的动作就不会移动并且不会攻击的机器人看起来至少很奇怪。 即使最佳策略是反击,AI也必须能够选择有效的命中来发起攻击。 为此,我们开发了一种用于选择最佳距离和射程的系统。

就像我们认为的那样:玩家最经常使用几个最喜欢的拳打,这意味着机器人将专门进行那些无法在选定距离上被典型玩家拳打断的攻击。 为此,我们:

  • 我们收集玩家所有击球的统计数据;
  • 我们来看看我们对它的典型攻击有最有效的反击。
  • 我们将此距离传递给机器人,并使其在整个战斗中始终如一。

从理论上讲,这听起来很酷,但实际上效果并不好:玩家很少闲置-他们几乎总是按下按钮并按下机器人,因此机器人通常由基于玩家攻击的决策系统指导,而不是主动出击。 因此,选择正确的射门只会对被动球员有效,但是选择最佳距离可以改善反击效果-他们变得更加多样化,因为 该机器人有更多选择。

在此阶段,该机器人已经非常有效:它知道如何最好地发起攻击,知道何时进行反击和何时进行阻止。 接下来,我们将讨论允许您设置所需的复杂性级别并削弱或增强该bot的系统。

怨恨与宽恕

这个有趣的概念是我们资产负债表系统的基础。 通过它,我们为初学者和专业人士创造了足够的复杂性,并激发玩家使用不同的笔触,从而增加了游戏的趣味性和娱乐性。

这个概念的实质在于名称:机器人在玩家的打击下冒犯了玩家,玩家会不时重复攻击。 怨恨是一种计数器,可以减少做出次优决策的机会,并增加AI进行完美反击的机会。

另一方面,宽恕则是宽恕-如果玩家停止发送垃圾邮件并转而使用其他点击,则机器人开始增加选择非最佳解决方案的机会,并减少反击的机会。

图片

如果我们想做一个复杂的机器人,我们会降低宽恕的速度,并设置很高的开始怨恨感;如果我们想做一个弱小的机器人,则相反。

延误

SF3中的每个漫游器都会延迟决策。 此参数使机器人在选择操作选项之前暂停N帧。 一个有用的东西-允许您创建对手认为的外观。 我们想要制作的机器人越简单,我们为其设置的延迟就越多。

条件检查

为了使游戏的某些部分更具情感,我们使用各种游戏变量的状态和关系进行检查。

如果玩家的生命值高于机器人,我们可以强迫某些机器人在一定距离内不使用投掷武器或降低宽恕的速度,如果生命值很少,则使AI更具攻击性。

图片

通常,这是一个插件,我们用它来生成僵尸程序急剧改变其行为和有效性的情况。 如果有必要,我们会限制机器人在各种情况下的某些动作,例如,机器人比玩家更难掷球,否则玩家将永远无法抛弃机器人,因为 可以应用投掷的距离是相同的,并且机器人只会有时间更早地开始其动画。

基于以上所有机制,我们创建了9个基本的AI预设,供我们在游戏的不同情况和部分中使用。 这种方法使您可以逐点更改余额并衡量更改。

结果


制定机器人策略的过程很长。 我们逐渐介绍了这些功能,因此有时我们的玩家会遭受痛苦,而在他们遭受痛苦之后,我们会阅读他们的评论和诅咒。 当我们下载最新版本的编辑内容时,有关对手行为的负面评论就停止了,对此我们感到非常自豪。

图片

我们的经验表明,使用当前方法对机器人进行进一步的改进不会明显提高质量。 因此,我们开始研究可模拟玩家动作的神经网络。

有几件事促使我们做出这个决定:

  1. 我们正在开发新的PvP格斗游戏-Shadow Fight:Arena。 它的特点是具有不同能力和机制的战术不同的英雄。 在这种条件下制作一个逼真的机器人要比SF3困难得多。
  2. 我们已经具有使用神经网络解决Cascadeur产品中的动画问题的积极经验。 这是一个用于创建所有游戏中使用的逼真的动画的程序;
  3. 我们希望组建一支由机器学习专家组成的团队,以进一步提高我们在该领域的专业知识,并利用它来改善Cascadeur和我们的游戏。

万岁游戏团队需要一名深度学习研究员。 此处阅读有关空缺的更多信息。

Source: https://habr.com/ru/post/zh-CN468023/


All Articles