游戏策划ai设计学习02---基于选点策略的战术ai设计
本文开始会分享一些ai设计方向,主要有两个大方向:基于不同游戏类型,基于不同实现策略。不同的游戏类型中有不同的设计诉求,ai的目的和用途自然有所区别,而相同类型的游戏的相同目的的ai也会因为实现策略不同导致有不同的优劣。 在基于不同游戏类型进行设计时会更加倾向于设计出符合游戏类型的比较完整的ai系统或主要框架,而基于不同实现策略进行设计时则会更加聚焦于某一个具体情况进行ai设计
在本文中主要对npc如何获取点位以及如何“评价”各个点位从而找到合适的点位进行方案设计
什么是战术ai
同样的,在讨论分享战术ai的设计之前,我们需要先定义什么是我们所说的战术ai。战术自然对应的是军队,我们可以狭义的认为,几个npc在战斗中的行为共同构成的有一定群体意识,并且在玩家视角中有一定战术分工的npc团体行动策略就是我们所要的战术ai
并且我们需要在这里将战略和战术的定义区分开来,战术更加聚焦于某一场具体的交战,所以场景会是更加具体而小的场景。战略则在更加宏观的层面,也可以认为一整场战斗中存在一个战略,而将战略实施落地的过程中就需要各个具体的战术。实际例子:一场csgo比赛,匪决定集体rushB,这是一个战略,而前往b点中途如何应对(可能中途有人架枪),到达b点之后如何选择防御点位架枪,敌人从不同门进入如何反攻,这些都是具体的需要各种战术应对的情况
后面也会提到群体ai,个人认为战术ai其实是群体ai的特殊进阶版,普通的群体ai只会要求几个npc集群能展现出一定的群体性行为,而战术ai则更进一步要求这样的行为是有合理战术意图的,并且会更加聚焦于战斗这一项中。而普通的群体ai则更加广泛,例如大街上一群行走的行人,旁边大楼突然爆炸而做出的群体性反应也能被称为群体ai,显然群体ai的范畴会覆盖我们的战术ai
基于选点策略
战术一词过于抽象,我们可以将战术的含义更加具象化,我们希望几个战斗npc能够表现出一定的战术战略并且彼此之间有所关联。这时我们可以将战术理解为npc的选点策略,这一点有slg或者fps游戏经验的话应该比较容易理解,在这类游戏中玩家很多时候的策略就是抢夺“关键点”,在slg中是各种交通要道,在fps中则是各种架枪位,掩体位。
为了体现这一策略中选点的重要性,这一篇会主要以fps游戏为例进行分析,其他类型的游戏也是可以用这样的设计思路的,最终还是具体情况具体分析
在本文中会对npc如何获取点位以及如何“评价”各个点位从而找到合适的点位进行方案设计
这里只是对npc获取位置和选择位置做架构设计,npc为什么移动?何时移动?怎么移动?在之后的文章中会再做设计
基本的场景点位概念
基于选点的思想,我们以fps经典的沙漠灰地图为例(见下图,想找一个俯视图的但没找到但大家应该都大概知道俯视效果了)。为了能让ai进行选点,我们首先要在场景中布点,布点大致有两种思路:铺满和只布关键点,具体会根据项目类型的不同有所不同,比如我只希望我的npc在掩体(或其他关键点)附近战斗,那自然我的布点规则只需要找到所有的关键点即可(可见上篇中所说的ai运行需要数据);但如果我希望我的npc能够在更多样的空间中指定各种战斗战术,那自然是需要铺满点位
这里所说的场景铺点位亦只是一种策略,也可以以铺满或只找关键点的策略,但只在npc附近进行点位生成,即只有npc存在的情况下才会生成附近的点位。不同情况不同分析,上文所说的点位信息存储在地图中,而注释中的则是需要在战斗中即时计算

点位的静态应用
我们在场景中铺设大量的点位是为了让npc能够获取到这些点的数据,而此时如果只是生成点的话npc只能知道这些点的位置是无法形成战术或是ai的,这时我们就需要赋予点位更多意义。假设我们已经在上图的沙漠灰A点布满了点位,这个时候我们给每个点位赋予“价值”,这里的价值就和我们正常游玩fps时一致,对于守方来说,各个掩体后面都是关键点(根据位置关键和价值有所差别)给于这些关键点更高的价值评分,从而让npc更加倾向于移动到掩体之后,而在马路等毫无掩体的地方更于更低的价值量。
这样一个基础的基于点位逻辑的ai就大体完成了,在A点内的ai更倾向于选择价值高的掩体之后,在战斗布局和战斗开始阶段就会更加倾向于前往掩体之后
但显然这样的npc并不会显得十分只能,因为很多竞技类的fps中都不存在所谓的完美掩体(即进攻方从任何方向都无法占优),一定有一个进攻方向会让玩家可以“掏他屁股”
点位的动态应用
显然这个时候我们需要让npc可以根据实际的战场形式来选择要躲的掩体位置,从而避开敌人的正面攻击,但这并不意味着上文所说的静态应用毫无价值,我们需要的是让ai可以动态的去计算点的价值,点的规则还是可以保留的,需要的只是增加计算点的价值量的规则。
这里的计算规则其实根据项目就会有很多不同的需求,这里简单举例以示思路:假设如上图中,右侧桥上来了敌人,此时npc能知道的就是敌人的方向和众多关键点的位置,为了能让npc看起来更加聪明,我们可以设置如下点位价值动态计算规则:
在掩体后,而不是直面敌人,这就意味着所有面朝敌人方向的点位都将被给于极低的评分,以让npc不会站在掩体前面跟玩家对射
保持安全距离,在射击游戏中一定的距离是必要的,当桥上来人时,显然没有人会走到离桥最近的掩体(因为这意味着你要穿越敌人的射击来到掩体位置),所以越靠近敌人的关键点将会给于更低的评分
保持合理距离(这一条不完全适用于竞技类fps),在大部分情况下我们都不会希望npc撤退,而是尽可能的前进或者防守,这就意味着我们可以规定,npc面朝玩家时背后的点位都是不加入考虑的(避免逃跑)
保持攻击枪线,npc在这里防守并不意味着就是单纯躲避玩家的攻击,优秀的掩体是需要在能够在躲避玩家攻击的同时,保持自己的攻击能力的点位,所以在当前玩家位置下如果这个关键点无法形成攻击玩家的枪线,那这个点也将被给于更低的价值
综上在战斗中ai已经可以根据这样的计算规则动态的找到,不面向玩家,并且距离中等,不影响自己开枪的点位。
点位的类型应用
但显然上文其实化简了fps的战斗,首先3d游戏是有纵深的,如A点就有一旁的桥洞,这个时候我们需要将点位进一步进行分类,让ai能够识别到一些特殊的点位,这里也是需要根据具体项目和战斗需要进行分类,我们就还是以沙漠灰为例,分类出“崖边”以及“低地”两个点位类型分别对应:如右边的桥桥边可以看到桥下的位置就是“崖边”,此处存在信息差(高低差),“低地”则是对应桥下的更低的平面
此时我们就可以以此丰富我们上面的防守策略,如果我们希望防守方更加保守,即让防守方避免靠近“崖边”以避免来自低处的黑枪(在崖边往往意味着有可能会受到多个方向的攻击)而相对的如果我们作为攻击方,对方没有出现在“崖边”也可以作为我们从“低处”偷偷绕过去的机会(防守方在A点里面,进攻方从桥洞摸上去)
点位类型的应用会在rpg类型的游戏中有更加丰富的应用此处只是以此距离(因为rpg中会有更丰富的Gameplay内容和交互性,如可以通过可以攀爬的墙拓宽玩家的进攻策略,而npc需要知道哪些位置是可以攀爬的从而做出特殊的防范和巡逻措施)
除此之外在游戏内容相对简单的竞技性fps中,我们可以将更多基础信息融入到点位中,如一些fps地图中存在低打高的地图设计,这个时候就可以将点位所处的高度也作为点位的信息,并以此指定npc的进攻或防守策略