【流言终结者】战术AI如何选择攻击目标?
原文来自:https://liquipedia.net/starcraft2/Automatic_Targeting
前言
自虚空之遗发布以来,在单位攻击优先级的问题上出现了诸多谬传与误解,如解放者优先攻击含气单位乃至巨像优先攻击重甲单位等等论断,且言者言之凿凿。近八年过去,此类流言依旧不绝于耳。希望本文可以让大部分星际玩家(或者愿意云的云玩家)厘清星际争霸2中最重要的仇恨机制,从而在战斗中更好地利用战术AI。

自动获取目标
自动获取目标是星际争霸2战术AI的一部分。当有目标在范围内而玩家没有手动指定目标的时候,单位将会自动获取目标并进行普通攻击。
在星际争霸2里,所有执行以下指令的单位和建筑都会使用这一功能:
· 停止(即“闲置”)
· 原地防守(hold)
· 巡逻
· 搜索移动(A move)
· 跟随盟友
而执行以下指令的单位和建筑将不会自动获取目标:
· 移动
· 攻击目标
· 任意技能或法术
单位在获取一个目标后将持续将其作为攻击目标,直到该目标不再有效(如:目标死亡、隐形或走上坡口等)、超出武器射程或有更高攻击优先级的单位进入武器射程。

优先级原则
一个单位或建筑会考虑所有在其武器“扫描范围”内的有效单位。大多数情况下,“扫描范围”为5或等于单位的武器射程(注:虚空之遗中,大多数地面单位远程武器的“最小扫描范围”为武器射程+0.5,这可以缓解单位在移动过程中接敌时意外走进低于其武器射程范围的情况,官方曾用追猎者排雷做过演示),取两者中的较大值。雷神的对空重炮、静态防御建筑和架起坦克的火炮属于例外。
选择目标单位遵循以下几条规则,按重要性排列依次是:
·哪个单位对我有威胁?
·哪个单位的攻击优先级(ATP,Attack Target Priority)最高?
·哪个单位允许我使用我的主要武器?
·仅在丢失先前的攻击目标时:哪个目标最近?
下面四节分别阐述了以上四点原则。只有当有多个目标同时满足前三点原则时,才会考虑第四点原则。
1. 威胁
被视作“威胁”的单位或建筑,一般都有以下两种特性之一:
·拥有可以还击的武器。换言之,也就是攻击者是“威胁”的有效攻击目标。
·单位拥有标旗“始终被视为威胁”。如闪电、先知、自爆球、地雷、渡鸦、地刺(未潜地)、感染虫、宿主、飞蛇。(注:在游戏版本早期单位都没有平A武器,拥有这一标旗可以让部队在这些单位进入射程时攻击他们,而不会朝其他可以还击的敌方单位转移火力)
2. 攻击优先级(ATP)
每个单位和建筑都有一个固定的攻击优先级。单位的攻击优先级越高,就越会被优先选中为目标。一般地,单位和防御性建筑的攻击优先级为20,其他建筑的为11。详细情况如下所示(括号内的数值为攻击优先级)
单位:
被感染的人类的茧(0)——所有虫茧、幼虫(10)——寡妇雷(未潜地)、航母拦截机
(19)——所有其他单位(20)
建筑:
光子炮台(20)——先知的静滞结界(20)——光子过载的水晶塔(小炮台)(20)——有乘员的地堡(20)——行星要塞(20)——渡鸦的自动炮台(20)——脊针爬虫(已扎根)(20)——脊针爬虫(已拔根)(19)——孢子爬虫(19)——导弹塔(19)——空的地堡(19)——所有其他建筑(11)
3. 多个武器
少数几个单位拥有多个武器,一个对空一个对敌,他们是:
· 风暴
· 雷神
· 大和
· 虫后
· 被感染的人类
在目标威胁相同且攻击优先级相同的情况下,这些单位将会优先使用自己的主要武器。这些单位(大和除外)的主要武器是对空武器。
4. 最近的目标
只有当单位不处于正在攻击的状态下时,自动获取目标才会考虑这一原则。单位处于攻击状态下时,将持续攻击选定的目标,直到目标不再有效(如死亡或超出武器射程)或有更重要的目标(根据前三条原则判定)进入射程。
到了这一步,绝大多数单位或建筑会直接选择剩余目标里距离自己最近的那个作为新的目标。
以下我们介绍例外情况。
A. 角度最近
以下单位会选择需要自身转动角度最小的单位作为目标:
· 火车侠
· 雷神
· 大和
· 雷兽
这种目标选择方法让单位有一种缓慢笨重的感觉。近战单位不会受多大影响,但是雷神和大和的表现可能会出人预料。
B. 到原目标的距离最近
只有巨像会选择距离原目标最近的单位。这一方法的初衷可能是让巨像显得笨重且易被攻击。该方法的优劣视情况而定:有时巨像会自动选择集群的机枪兵和刺蛇来让输出最大化,有时巨像则会无视已经跑到脚底的小狗。

例子
· 虚空会优先攻击机枪而非光头。这是因为机枪会被视为“威胁”,而光头不会。
· 虚空会无差别地攻击王虫、蟑螂和工蜂。这是因为这三者都不会被视为“威胁”,且ATP都是20。唯一的判定原则是单位距离虚空的远近。
· 虫后会优先攻击先知,而非凤凰。这是因为凤凰不会被视为“威胁”(因为凤凰的武器不能对地),而先知有“始终被视为威胁”的标旗。
· 小狗会优先攻击有乘员的地堡,而非补给站。这是因为有乘员的地堡会被视为“威胁”,而补给站不会。
· 如果地堡是空的,它就不会被视为“威胁”,但是仍然会被优先攻击。这是因为空的地堡的ATP(19)要比补给站的ATP(11)要高。
· 小狗会优先攻击机枪兵,而非空的地堡。这是因为机枪会被视为“威胁”,而空的地堡不会。
· 飞龙会优先攻击机枪兵,而非导弹塔。虽然此两者均会被视作“威胁”,但机枪兵的ATP(20)要比导弹塔的ATP(19)高。
· 雷神和虫后会优先攻击飞龙,而非小狗。这是因为虽然二者的ATP一样均为20,但雷神和虫后攻击飞龙使用的是主要武器。
· 如果蟑螂和王虫都在雷神和虫后的次要武器射程外、主要武器射程内,雷神和虫后将会优先攻击蟑螂头上飘着的王虫。也就是说,对雷神或虫后朝着位于同一地点的蟑螂和王虫下达A地板指令,雷神或虫后在王虫进入其对空武器射程后将会停下来攻击王虫。

杂项
· 所有工人单位(包括矿骡)的“默认获取等级”(Default Acquire Level)是“防御性”。只有当他们执行攻击指令的时候,“默认获取等级”才会变为和其他单位和建筑一样的“攻击性”。
· 拥有“防御性”默认获取等级的单位不会自动获取目标。
· 拥有“防御性”默认获取等级的单位不会被其他单位视作“威胁”。
· 以上原则有一个例外:当SCV或者矿骡修理一个可被视为“威胁”的单位时,正在执行维修任务的单位将会继承目标的“威胁”与ATP。如果距离攻击者更近,执行维修任务的单位就会被优先攻击。
· 例子:在飞龙看来,维修导弹塔的SCV与导弹塔的优先级相同(均被视作“威胁”,且ATP为19)。如果SCV位于飞龙与导弹塔之间,那么飞龙将会攻击(更近的)SCV。
· 幽灵和地刺的武器可以关闭,进而停用自动获取目标这一功能。关闭武器可以让单位不会引人注意。
· 当一个单位或建筑在攻击一个具有最高优先级的单位并执行明确的“攻击目标”命令时,发布“停止”命令既不会导致攻击停止,也不会导致目标切换。在修地堡的时候,可以利用这一特性优先处理特定的敌方建筑,同时仍能对附近的单位做出反应。
· “始终被视作威胁”这一标旗可能是用来缓解像施法者和具有特殊攻击的单位等诱人目标带来的挫败感。然而,在某些情况下,标旗带来的效果可能不太直观。例如,空对地单位可能优先考虑更近的地对地单位(自爆球、地刺、虫群宿主),而非更危险的地对空单位和建筑(刺蛇、防空、追猎、地堡等)。
· AI玩家眼里,工人(包括矿骡)的ATP为10,这使得他们的优先级低于建筑。这个特性被称为“覆盖目标优先级”。这可能是对人类玩家的一点补偿。
更新完毕,有兴趣的可以翻编辑器做做测试。上面的结论基本与我摆弄编辑器时候得到的结果相同。至于老生常谈的解放者攻击目标问题,以及巨像扫气矿(更离谱的还有巨像优先扫光头而非机枪)的问题,希望这个帖子足以答疑解惑。