文章主题:游戏AI, 体育竞技, 分层状态机, 角色层状态机
在我国,真正涉足游戏AI领域的开发者屈指可数。许多人只是口头上谈论这个概念,却并未真正接触过实际的编码工作,因此让人感到迷茫,无从下手。由于我国的游戏市场主要以MMO和卡牌类型为主,RTS游戏相对较少,体育竞技类游戏更是寥寥无几,真正具备强大AI能力的开发者更是少之又少。从AI技术难度上来看,顺序依次为:MMO、FPS、RTS、体育竞技。如果你是一位曾经参与过游戏AI开发的实际开发者,可以参考五年前的一些代码,以体育竞技类游戏为例,深入浅出地讲解一下游戏团队策略和分层状态机的基本概念,以及如何将这些理念有效地应用到代码中。一旦你能够成功实现体育竞技类游戏的AI,那么即时战略游戏的开发将变得轻而易举。
硬派游戏AI,不是虚无缥缈的神经网络,用神经网络其实是一个黑洞,把问题一脚踢给计算机,认为我只要训练它,它就能解决一切问题的懒人想法。更不是遗传算法和模糊逻辑,你想想以前8位机,16位机上就能有比较激烈对抗的足球游戏、篮球游戏,那么差的处理器能做这些计算么?
硬派游戏AI,就是状态机和行为树。状态机是基本功,行为树可选(早年AI没行为树这东西,大家都是hard code的)。大部分人说到这里也就没了,各位读完还是无法写代码。因为没有把最核心的三个问题讲清楚,即:分层状态机、决策支持系统、以及团队角色分配。下面分类介绍:
何为分层状态机?
在每个角色身上,我们可以观察到三种不同的状态机:基础层状态机、行为层状态机以及角色层状态机。这些状态机分别对应于不同层次的复杂性,并为更高层次的状态机提供接口。具体来说,基础层状态机负责处理较低层次的复杂性,而行为层状态机则负责处理更高层次的复杂性。为了实现更复杂的逻辑,上层状态机通过设定下层状态机的目标来实现。这种分层状态机的设计使得角色能够更好地应对各种复杂情况,并具有更高的灵活性和适应性。
基础状态机:直接控制角色动画、提供基础动作实现,为上层提供支持。
行为状态机:分解动作,躲避跑、直线移动、原地站立、要球、传球、射球、追球、打人、跳。
角色状态机:实现更复杂的逻辑,比如防射求、篮板等都是由N次直线运动+跳跃或者打人完成。
在控制过程中,每一层状态机都通过为下一层状态机设定目标来实现。一旦目标确定,下层状态机将自动运行,而上层状态机无需关心动画的具体播放位置以及当前的动作状态。这种设计使得上层状态机能够展现出更高级的拟人化行为,同时保持了固定的频率更新,例如每秒10次,以便判断状态变迁并检查底层目标的完成情况。在最高层,角色状态机的工作由团队AI负责掌控,也就是角色分配的工作。对于行为状态机以上的状态抉择,例如回防、射球或起跳点的选择以及路径规划等,都由决策支持系统提供相应的支持。
何为决策支持系统?
在本文中,我们将探讨一种名为状态机的模型,它被视为角色的“大脑”。与此同时,决策支持系统则扮演着“眼睛和耳朵”的角色。为了更好地理解这种模型,我们可以借助一些常见的工具,如势力图(Influence Map)和白板(类似于不同角色间的对话)。在这些工具中,势力图尤为常见,并且可以通过如下示例图来加以说明:
势力图1:于防守篮板距离的map,每格分值为最远距离减去该格到篮板所在格子的距离
势力图2:进攻篮板距离的map,每个分值为最远距离减去该格到篮板距离,篮板后为0
势力图3:同敌人距离,每个敌人有影响范围,范围内,离敌人越近分越低,范围重叠选低的。
势力图4:同所有队友目标位置距离map,打分方法类似上图。
势力图5:与每个队友目标位置距离的map,标识单个队友目标位置距离的map。
势力图6:现实传球可行性的map,分数越高,越容易把球传到该格子上。
势力图7:容易把球传出的位置map,越容易直接传球给队友的区域分数越高。
势力图8:综合map,把以上map按一定加权求和。球员有合法目标区域,便于实现内线游走和外线游走。
在足球运动中,每名球员的性格特点和价值取向各有差异,这使得他们在比赛中展现出不同的竞技状态。有些人偏向保守,愿意遵循传统的战术和策略;而另一些人则热衷于创新和冒险,他们更倾向于尝试新颖的战术组合和技巧。尽管如此,这些不同的个体因素,只是在他们所处的团队中发挥着不同的作用,为团队的整体表现提供支持。因此,对于教练和球队管理者来说,了解并有效利用这些球员的特点,是制定出针对性的比赛策略和调整方案的关键所在。而这些个性化的球员数据,正是为了帮助上层的三层状态机和团队状态机,提供更加精准和有效的决策依据。
何为团队角色分配?
在层次化的状态机模型中,每一层都为下一层设定了明确的目标,从而使得下层能够根据这些目标自动展开行动。对于顶层角色层的目标,則由最高层的AI团队负责战术层面的指导与规划。这样的设计旨在实现各层之间的协同作用,确保整个系统的高效运行。
团队状态机跟据当前的游戏情况确定当前首要目标(进攻或者防守),又根据当前的势力图等信息,确定进攻或者防守的具体战略(比如中路突破、盘路包抄、下底传中等),最终为当前己方的所有角色分配一个新的任务,即设定角色层状态机的新目标,确定他是做主攻还是做助攻,还是联防还是策应。具体该怎么联防,怎么策应,那就是角色层状态机的事情了。
话题总结
其实团队AI没那么玄乎,任何问题就是一个编程的建模问题,而最复杂的体育竞技类游戏的AI策略,上文已经给出模型,相信各位略加修改即可使用。写状态机是游戏AI的硬功夫,如果状态机逻辑经常改变或者项目规模大了以后可以考虑引入决策树来控制状态机,程序提供一系列接口,然后用可视化的编辑器进行更改,感兴趣的人可以参考决策树相关文章。
概率统计
如果上面这些逻辑都实现了,这时候才可以辅助与概率统计来让角色具备学习特性,比如统计某个策略对对手的成败情况,用来支撑下一次决策,这样能够逐步发现对手的弱点,还可以统计所有用户的大数据,来确定某种情况下,选择什么策略,能够对付60%的用户。
在上面所有逻辑都实现了,你调试好了,玩着比较顺畅的时候,再在团队角色分配处尝试使用神经网络或者模糊逻辑,同样是学习大数据,来引入一些不可控的人性化的成分,让游戏更加有意思。(EA的 FIFA 20XX号称引入神经网络,Call of Duty的AI也号称引入了神经网络和学习机制)。确实能让游戏更有趣一点,但是仅仅有趣了一点而已。
AI时代,拥有个人微信机器人AI助手!AI时代不落人后!
免费ChatGPT问答,办公、写作、生活好得力助手!
搜索微信号aigc666aigc999或上边扫码,即可拥有个人AI助手!