省流总结
赶时间的朋友直接看这儿 (๑•ㅂ•)✧:
有限状态机(FSM)就是游戏AI的底层骨架。 它不"思考",它只是根据条件在不同行为模式之间切换——跟老电视换台一个逻辑。手动挡,纯纯的 if-else。
吃豆人的四个幽灵各有"性格",但本质上是同一套状态框架配了不同的目标计算公式。红色直球、粉色埋伏、蓝色脑回路清奇、橙色又怂又爱玩。
魂系Boss难但公平: 它把状态切换的时机"写"在了动作上,你在背板,其实是在记忆它的状态转移规律。
困难难度的AI不一定更聪明,可能只是参数调得更极端。 反应更快、容错更低、连招更稳——底层逻辑一模一样。
短期来看FSM依然不可替代。 不是因为先进,是因为好用、可控、稳定。游戏AI的第一要务不是"聪明",是"让玩家爽"。
想深入了解: 十分推荐 Ian Millington 的《Artificial Intelligence for Games》,入门十分友好。
引子:那些让你怀疑人生的"智障"瞬间
让我们想象一下——
你坐在屏幕前,盯着那个已经虐了你几十遍的Boss,突然冒出一个念头:
"这家伙是不是脑子有毛病?"
为什么它的招式循环总让人觉得像"对好暗号的套路"?先挥三刀,后退两步,放个大招,然后喘气……如此往复,精准得像个打卡上班的社畜 (。-ω´-)。
更离谱的是,你换了个难度,同一个敌人好像突然"变迟钝"了。
简单模式下它像个盲人,困难模式下它却能预判你的走位,简直像开了挂。
真相可能和你想象的不太一样。
游戏里的AI不像人类玩家那样会观察局势、从失败中学习、在关键时刻灵机一动。但它也并非完全没有"思考"——它的思考方式,是一种基于预定义规则的快速逻辑判断。
当系统每帧评估"玩家距离 < 3米 && 攻击冷却完毕 && 血量 > 20%"这个复合条件时,这就是一次计算与决策。
只不过它不是基于意识上的思考,而是基于一套规则来迅速做出响应。
它所有智能表现的背后,都遵循着一个极简的内核:基于当前"频道"(状态)和外部输入(条件),瞬间"切换"到下一个预设好的行为模式。
今天,让我们来拆解这套让无数敌人"活"起来的技术:有限状态机(FSM)。
![]()
豆包还是太好用了
一、什么是有限状态机?
别被这名字唬住了。
这玩意儿其实就是一个"如果……就……"的规则集合。复杂吗?不复杂。好用吗?好用得一批。
三个核心要素
有限状态机(FSM,Finite State Machine)由三个要素构成:
状态(State): 系统当前"是什么"。比如"巡逻中"、"发现玩家"、"追击"、"正在攻击"。任一时刻,系统只能处于一个状态。就像你打游戏时的三种状态——"活着"、"残血"、"躺地板等队友拉",同一时间你只能占其中一种 ╮(╯▽╰)╭。
转移(Transition): 从一个状态跳到另一个状态的通道。转移由条件触发——当某个条件满足时,系统从当前状态切到目标状态。比如"玩家进入视野"这个条件一成立,"巡逻"就直接跳到"追击",不跟你商量的。
动作(Action): 进某个状态时"做什么",或者在某个状态期间"持续做什么"。动作通常和转移绑定——比如从"巡逻"切到"追击"时,可能同时触发"播放警报音效"+"改变移动速度"这两个动作。
一句话总结:条件触发转移,转移带动状态切换,状态切换驱动动作执行。
还是有点抽象?来,让我们想象一个场景。
假设我们手头上刚好有一台老式电视机
这是一台老电视,上面有1、2、3、4几个频道按钮:
![]()
电视机自己不会决定该看什么。你按哪个键,它就跳哪个频道,播那个频道预设好的内容。
游戏AI的运行逻辑,跟这台电视机的运作方式惊人地相似。
它的本质是:没有认知意义上的自由思考,只有基于预设规则的高效决策响应。
用一句话总结FSM的核心逻辑——
"如果条件A成立,就从状态X跳到状态Y,并执行Y的预设行为。"
正是这简单但极其强大的逻辑链条,以及设计师们围绕它构建的无数精巧的规则,共同撑起了在绝大多数商业游戏中主流的游戏AI设计。从1980年的《吃豆人》到2024年的3A大作,这套"状态+转移+动作"的范式始终是基础——只是"频道"越来越多,"节目单"越来越复杂罢了。
![]()
xhh网页版上传速度好慢
二、经典案例:这些你熟悉的游戏,都在用FSM
理解了基本概念之后,你会发现这套"简单粗暴"的技术比你想象的更无处不在。
1. 吃豆人:四个不同的幽灵
要说FSM在游戏界的"祖师爷",那必须是1980年的《吃豆人》(Pac-Man)。
你可能不知道——那四个追着你跑的幽灵,其实各有各的"性格"。这可不是程序员随手写的,而是精心设计的规则逻辑。同一个"追击"状态,因为目标位置算法不同,就呈现出截然不同的行为风格 (。-ω´-)。
Blinky(红色幽灵,外号"Shadow"): 行为最简单粗暴——直球追击。目标永远是吃豆人当前的位置。算是一个死心眼,别人说什么就做什么,绝不绕弯子(写到这里的时候莫名想起了豆包)。你觉得它"头铁",其实它只是目标设定最简单罢了。
Pinky(粉色幽灵,外号"Speedy"): 走的是堵截路线。它会预判吃豆人的前进方向,提前跑到你前方四格的位置等着。其实就是"预判你的预判",阴险得玩意。不过这里有个有趣的细节——因为初代代码的bug,当吃豆人向上移动时Pinky实际预判的位置是前方四格+左侧四格,导致行为比预期更诡异 (;´д`)。
Inky(蓝色幽灵,外号"Bashful"): 四个里最复杂的一个。它的目标位置不仅取决于吃豆人的位置,还要参考Blinky的位置——它的目标位置计算是四个幽灵中最复杂的:先确定吃豆人前方两格的位置作为基准点,然后计算从Blinky到这个基准点的向量,再将这个向量翻倍(以基准点为起点,沿同一方向延长相同距离),终点才是Inky的目标。。这个计算方式让它的行为看起来"飘忽不定",有时能和Blinky形成夹击,有时又莫名其妙跑偏。有时候觉得这个小东西有些"神经质"?其实全是计算公式导致的。
Clyde(橙色幽灵,外号"Pokey"): 完美诠释了什么叫"又怂又勇"。离吃豆人远的时候,它会像Blinky一样冲过来;一旦距离靠近到8格以内,瞬间"认怂",掉头跑回左下角自己的老巢。这种若即若离的行为,反而让它最难被预判。
有趣的是,Inky也继承了和Pinky同样的bug——当吃豆人向上移动时,它的基准点计算也会出错,这让本就难以预测的Inky变得更加诡异 (;´д`)。Don Hodges的反汇编分析证实了两段代码使用了相同的buggy逻辑(Z80处理器的8位溢出问题)
这四个幽灵的"性格",本质上是不同的目标计算方式。吃豆人的设计师并没有给幽灵添加什么"智能"——他们做的,是为每个幽灵写了一套独特的规则,然后让这些规则在同一套状态框架下运行。玩家觉得幽灵"有智慧""会配合围堵",其实是设计智慧的产物。
这套设计直到四十多年后的今天,依然被无数游戏借鉴。下次玩吃豆人的时候你可以观察一下——红色永远是"平头哥",粉色喜欢"埋伏",蓝色"脑回路清奇",橙色"又怂又爱玩"。
![]()
2. 马里奥:你自己也是个"行走的状态机"
FSM不只用在敌人身上。
你操控的角色,本身也是由规则控制。
想想《超级马里奥》的变身系统:小马里奥踩敌人就挂 → 吃蘑菇变大,能抗一次伤害、能顶碎砖块 → 吃花朵变火焰马里奥,扔火球。
每次变身,就是一次条件触发的状态转移。受伤了?从大马里奥"降档"回小马里奥,又是一次转移。吃到星星?进入"无敌"状态,短暂时间内碰撞任何敌人都是秒杀。
不是我喜欢的状态机,直接拒绝 (๑•ㅂ•)✧。
而且这套系统还藏着一个精妙的设计:状态转换有优先级排序。比如"无敌"状态的退出条件只有"时间结束",优先级高于"受到伤害"这条。所以当马里奥无敌的时候,即使伤害条件成立也不会触发降档——你总不希望吃了星星还被小怪碰死吧。这种基于优先级的条件隔离,保证了逻辑不会乱套。
3. 合金装备:潜行游戏的AI教科书
《合金装备》(Metal Gear Solid)系列的守卫AI,说它是FSM应用的教科书级案例一点都不夸张。
一个典型守卫的行为逻辑大概长这样:
![]()
每个状态都有明确的行为和转移条件
注: 不同游戏或同一系列不同作品中,守卫AI的状态细节可能有所差异。有些设计在"发现玩家"后会同时进入警戒和追击状态(即拉警报的同时就开始追),而非严格按顺序执行。这里展示的是MGS系列最经典的逻辑框架。
"!"和"?"这两个经典图标,本质上就是状态转移的视觉反馈。 看到"?",你就知道守卫进入了"调查"状态,还有机会溜走;看到"!",你就知道自己暴露了,该跑路了。
这套设计的精妙之处在于:它让玩家能读懂AI的行为逻辑。 你不是在和一个黑箱博弈,而是在和一个你能理解的系统互动。看到守卫头顶冒出"?",心里就有数了:"哦,还没暴露,赶紧躲。"
这才是好AI设计的核心——不是多聪明,而是多"可读"。 能让玩家"看懂"的AI,才是真正的好AI。

图片源于百度百科
4. 光环2:从FSM到行为树的进化
到了2004年的《光环2》(Halo 2),Bungie的程序员们碰到了一个头疼的问题。
随着游戏复杂度提升,FSM开始不够用了。
一个精英战士(Elite)可能有这些状态:巡逻、发现玩家、近战攻击、远程射击、躲掩体、呼叫支援、逃跑……每个状态都可能转移到其他任何状态。状态越多,转移线就呈指数级增长。
这就引出了一个经典痛点:"状态爆炸"(State Explosion)。
假设你有5个状态,转移关系最多是 5 × 4 = 20 条。当每个状态都可能跳转到其他任意状态下,如果有20个状态呢?理论上最多 20 × 19 = 380 条转移关系。你不需要全部实现,但你得考虑每一条是否存在、需不需要处理。
当然,实际项目中很少需要实现所有可能的转移(那将是维护噩梦),但即使只实现其中30%,随着状态增长,需要考虑的转移关系仍然呈超线性增长。
更麻烦的是:想加一个新行为就得和每个已有状态组合。 比如你想加一个"被EMP瘫痪"的状态——
巡逻中被瘫痪 → 进入瘫痪,2秒后恢复
追击中被打断 → 进入混乱,重新搜索目标
攻击中被瘫痪 → 攻击中断,玩家获得反击窗口
每个状态都得想一遍 (;´д`)
每加一个新状态,维护成本都在涨。这就是"状态爆炸"。
《光环 2》的做法是引入了一种混合结构——以层次有限状态机(HFSM)为基础,将状态间的转移组织成行为有向无环图(DAG)作为核心。
插一句纠正:很多人(包括不少技术文章)误以为《光环2》用的是"行为树"(Behavior Tree)。其实它用的是一种高度复杂的分层状态机(HFSM)和有向无环图(DAG)的混合架构。
严格来说,《光环2')使用的是一种介于HFSM和现代行为树之间的混合架构——它具备树形层次结构,但缺少后来标准化的Tick机制和返回状态协议。业界对其归类存在争议:Bungie的程序员在GDC演讲中同时使用了'HFSM'、'behavior tree'和'behavior DAG'三个词来描述它。
简单来说,HFSM和传统FSM的根本区别在于:它给状态加了层级关系。传统FSM是所有状态平铺在一个平面上,而HFSM允许状态内部嵌套子状态机。
以《光环2》中精英战士(Elite)的HFSM为例:
![]()
子状态自动继承父状态的某些通用逻辑。比如"战斗模式"这个父状态下,无论当前是在近战还是远程射击,如果"血量低于20%"这个条件成立,都会触发转移到"逃跑"状态。这样就不用为每个子状态单独写逃跑逻辑了。
顺便科普下:行为树(Behavior Tree)到底是什么?
它不是FSM的直系后代,而是从HFSM中获得灵感的新架构。理解它得搞懂三个核心机制:
1. Tick机制(脉冲驱动): 行为树不是从头跑到尾执行一次就完了,而是每帧游戏循环(或固定频率)从根节点重新开始,深度优先遍历整棵树。也就意味着AI每帧都会重新评估自己的决策。
2. 三种返回状态: 每个节点执行后返回三种结果之一——成功(success)、失败(failure)、运行中(running)。"运行中"很关键:它告诉父节点"我还在跑,别跳过我"。
3. 组合节点控制逻辑流:
Selector(选择器): 从左到右尝试子节点,直到某个返回"成功"或"运行中"。
Sequence(顺序器): 从左到右执行子节点,所有子节点都返回"成功"才算成功,只要有一个返回"失败"就整体失败。
如果是带记忆功能的Selector(Memory Selector),它会记住返回'运行中'的节点位置,下一帧直接从该节点继续;普通Selector则会每帧从第一个子节点重新开始评估。
来看一个微缩版的行为树是怎么跑的:
![]()
这就是行为树相比传统FSM的核心优势:行为树相比FSM的核心优势——可中断性(interruptibility) 不需要为每个状态单独写"如果看到手雷就进入躲避"的转移条件——只要把躲避放在树的最左边(高优先级位置),每帧Tick时自动覆盖低优行为。相比之下,在传统FSM里,你需要从"攻击"、"射击"、"巡逻"等每一个状态都画一条"看到手雷→躲避"的转移线,维护噩梦 (摊手`。
行为树在《光环2》之后逐渐普及,成为现代游戏AI最主流的架构之一。但在《光环2》本身,使用的依然是HFSM/行为DAG。
5. 上古卷轴5:NPC的"日常生活"
《上古卷轴5:天际》(Skyrim)的NPC行为系统,是FSM另一个有趣的应用方向——不是战斗,而是"生活"。
在天际省,每个NPC都有自己的日常作息:
![]()
这些看起来"像真人"的行为,背后是一个比简单FSM复杂得多的系统——Radiant AI。它不仅仅是"时间到了就切换状态",还需要考虑NPC的"需求"、地点偏好、与其他NPC的关系等多个维度。Bethesda的开发者们需要在"让NPC看起来自然"和"保证游戏性能"之间做大量权衡。
当然,这套系统下违和感依然存在。如果你半夜闯进NPC家里,你会看到他们突然从床上弹起来,像没事人一样开始"白天"的行为——哪怕外面还是漆黑一片。
这种现象更多归因于开发者在具体应用中的权衡和取舍:如果让NPC对被吵醒做出更"真实"的反应(比如愤怒、报警),就需要额外的状态分支和对话树,这会大幅增加开发成本和运行时开销。在有限的资源下,Bethesda选择了"功能优先"而非"细节完美"。
所以并非FSM模型本身的本质缺陷,而是面对现实中"在什么程度下够用就行"的一种选择。 (下次写文章我也这么说(╹╹))
不过即便如此,这套系统在2011年发布时,已经足够让玩家感叹:"这世界活起来了!"毕竟,能看着NPC按自己的节奏生活,本身就是一种沉浸感。

领主巴尔古夫被吵醒
6. 魂系Boss战:极致的套路循环
说到FSM,不能不提FromSoftware的"魂系"游戏。
以《黑暗之魂3》的教宗沙力万为例:
第一阶段:
普通攻击状态:挥剑连击,有固定的3-4招组合
法术状态:后跳拉开距离,释放追踪魔法
突进状态:向前突刺,位移+攻击一体
特殊状态:血量降到约66%,触发过场动画,召唤分身
第二阶段:
攻击节奏加快,招式组合变化
分身加入战斗,新增"分身协同攻击"状态
部分招式增加二阶段专属变体
每个阶段内部,Boss会按照一定的概率或条件在不同状态间切换。比如:
连续近战攻击2-3次后,大概率进入法术状态(避免无限连招)
玩家离得远时,更可能使用突进或远程技能
玩家处于攻击硬直时,Boss会优先选择高伤害招式
血量低于阈值时,强制触发阶段转换
你背板的过程,本质上就是在记忆这个状态机的转移规律。
为什么老玩家能无伤过Boss?因为他们已经摸清了——"哦,他挥完第三刀之后有0.5秒硬直,这时候可以贪两刀。"这0.5秒硬直,就是切换的空档期——Boss正在从"攻击"切到"下一个动作",这个瞬间它不防御。
但魂系真正高明的地方,远不止"有规律可循"这么简单。 其精髓在于:故意暴露行为机制。
换句话说,Boss不是偷偷切换状态的——它会主动告诉你它要干什么:
视觉提示: Boss的武器发光、特定姿态前摇(比如举刀过头顶=即将劈砍)、脚下出现法术法阵=即将释放范围魔法。这些不是装饰性动画,而是状态转移的窗口提示。
音频提示: Boss的吼叫、特定音效、甚至音乐节奏的变化,都在暗示"我要切换到新状态了"。
动作编排: 连招的终结动作通常有夸张的收招姿态,给玩家明确的"可以反击了"的信号。
这才是"难但公平"的内在:FromSoftware把一套规则系统的"可读性"推向了极致。 它不是在隐瞒AI的行为逻辑,而是用最直观的方式把规则"写"在Boss的动作上。玩家要做的不是猜Boss会做什么,而是观察Boss正在做什么、即将做什么。
正是魂系把FSM的"死板"转化为了"可学习的挑战",然后用视听语言把这个学习过程变得公平。 玩家通过死亡来"学习"这个规律,最终实现"我懂了,我能躲了"的成就感。这种设计理念,正是魂系游戏让人又爱又恨的核心(。-ω´-)。
![]()
7. 街头霸王6:难度上的"暗箱操作"
格斗游戏的难度设计,是另一个暴露FSM本质的绝佳案例。
在《街头霸王6》这类游戏中,不同难度的AI对手,底层状态机其实是同一套。区别在于参数的调整:
![]()
注: 具体数值因游戏而异,上表仅示意难度设计的典型趋势。不同开发商的实现方式各不相同,有些游戏甚至会在高难度下给AI解锁额外的招式或改变AI的行为模式,而非仅仅调整参数。
看到了吗?困难模式的AI不是"更聪明",它只是"更快、更准、更狠"。它依然在执行同一套规则,只不过条件判断更频繁、动作执行更精准、容错更低。
这也是为什么很多格斗高玩会说:"AI再难也是死的。" 它没有真正的应变能力,所谓"难度"只是数值调整,不是智能提升。一旦你摸清了它的行为循环和反应模式,再难的AI也能被针对——比如故意做个假动作,等它"反应"了再打确反。
更有意思的是,格斗游戏AI的"择"(猜拳)机制比表面看起来复杂得多。中等难度的AI在上段/中段/下段三择时,不是完全随机的——它基于一个概率权重表做决策。这个表可以模拟人类玩家的不确定性和心理博弈。
一些更高级的实现里,这个权重表会根据你的历史行为动态微调。比如你连续三次防住下段攻击,AI的下段攻击权重会逐渐降低,转而增加上段攻击的概率。这已经不单纯是if-else了——它更接近效用系统(Utility AI)的雏形:AI根据对局势的评估(你的防御倾向、距离、血量差等)动态调整行为选择。
还有些格斗游戏为了让AI更像真人,会在决策中引入概率性的"次优解"——让AI在特定情况下有概率选择非最优的招式,模拟人类的犹豫和失误。
毕竟,一个100%正确的对手不是挑战,是折磨 (摊手。
三、当套路不够用了——从FSM的极限到AI的进化
七个案例看下来,你有什么感觉?
好了,七个案例看完了。
从1980年的吃豆人到2023年的街霸6,四十多年过去了——你有没有觉得,越往后翻,这套东西就越像在硬撑?
吃豆人的时候,幽灵拢共就四个行为,状态机画得那叫一个清爽。马里奥里的库巴也还行吧,多几个状态而已,没什么大不了的。到了合金装备,小岛秀夫那些人已经开始靠"视线"这种外部条件来触发状态切换了——这套架构开始膨胀了。光环2更不用说,上一章我们亲眼看着它炸掉的。上古卷轴5里NPC的行为,有时候你完全搞不懂它脑子里在想什么。魂系Boss的招式套路呢?死个几十次你也就背下来了。街霸6的AI,说到底不还是在状态之间跳来跳去?
你发现没有——这些案例不是一个一个的"意外翻车"。
它们暴露的是同一套架构在不同复杂度下的同一个毛病。只不过有的症状轻,有的直接炸了。
那这个"毛病"到底是个什么东西?咱们拆开看看。
![]()
吓哭了
FSM的三大根本矛盾
不是一个。
是三个。互相关联,但各有各的疼法。
矛盾一:改不动——牵一发动全身
想象你在维护合金装备里Snake敌人的行为逻辑。
这个敌人有巡逻、警戒、搜索、战斗、撤退……大概十几个状态。每个状态里有一套自己的逻辑,状态之间还有一堆转换条件。你动了一下"警戒状态下发现异常声音"的处理逻辑,觉得没什么大不了的嘛。
然后QA跑过来跟你说:战斗状态下的敌人有时候会卡在原地不动。
你查了三个小时。终于发现——"战斗"状态里有个转换条件,依赖的变量恰好是你刚刚动过的那个。本来这条件写死了一个阈值,你动了它,连锁反应一路传导,炸在了你压根没想到的地方 (摊手`。
这就是传统FSM最让人血压飙升的地方——没有"封装"。
所有状态摊在一个平面上,彼此之间靠硬连线连着。你动一根线,不知道会扯到哪。用软件工程的话说——耦合太紧了,紧到窒息。
光环2的遭遇本质上不就是同一个问题的极端版本吗?只不过它是以"状态爆炸"的形式爆发的,这个上一章已经详细聊过了,不再重复展开。
那你可能会想——能不能让不同状态之间"共享"某些行为?比如不管在巡逻还是战斗,敌人听到枪声都得找掩体。在传统方案里,你要么在每个相关状态下各写一遍这段逻辑,要么给每个状态都拉一条转移线。
结果就是蜘蛛网,而且越织越密。
Barr Group的工程师们谈到这个问题时有一句很精准的总结:传统FSM缺失的,是"抽取共同行为以便跨多个状态共享的机制"。
机制缺失。不是"做得不好",是压根没有。
你感受一下这个区别 (。-ω´-)。
矛盾二:走不远——只能走画好的路
再来看第二个问题。
魂系Boss战,你死了几十次之后,是不是慢慢摸清了它的套路?它抬手你就滚,它蓄力你绕后,它倒地你上去贪刀。等你终于过了——那种感觉是什么?
不是"我反应变快了"。
是"我背下来了。"
没错,你背的就是它的状态机。这套架构里的AI,只能做程序员预先画好的事。它不会临场发挥,不会灵光乍现,不会"突然想试试新打法"。你把它的状态转移图画出来,它的全部可能性就都在那张纸上了。没有意外惊喜,甚至没有意外。
街霸6的AI也一样。虽然看起来打得很凶,但本质上还是在"对手近身→切换为压制状态""对手远程→切换为牵制状态"之间跳来跳去。职业玩家打几局就能摸到规律,因为规律确实就在那里。
但这就引出了一个反直觉的问题——
可预测,有时候不是坏事。
你想想,魂系Boss要是每局随机出招、毫无规律,你还能学会吗?还能感受到"我悟了"的成就感吗?很多设计师是故意让AI带一点点"笨"的——玩家需要的不是一个冷血杀手,是一个"可以被理解、可以被战胜"的对手。
所以可预测性在游戏里有时候反而是个feature。
但问题在于——传统FSM的"可预测"跟设计师想要的"可控的可预测"之间,差了一个维度。这套方案只能做程序员想到的事。而一个真正优秀的游戏对手,应该能在设计师划定的边界内,偶尔给你一点小惊喜。
这是另一个话题了,第四章接着聊。
矛盾三:看不懂——它到底在想什么?
第三个矛盾最容易被人忽略,但说句实话——它是三个里面最让人头疼的。
你玩过老滚5的话,大概率遇到过这种名场面:一个NPC正跟你打得激烈——突然,他把武器一收,走到旁边的桌子上,开始啃面包。
你:???
他为什么要啃面包?可能是血量低了触发了某个行为切换。但——为什么现在啃?为什么啃那个面包?为什么不吃包里的药水?为什么不先跑远了再吃?
你不知道。设计师自己搞不好也不知道。
这就是FSM最难受的"可解释性"问题——它只告诉你角色此刻在做什么,不告诉你为什么选了这条路。 没有决策过程的记录,没有优先级排序,没有"因为A>B>C所以我选D"的推理链。你就只看到一个闪烁的圆点在状态图上跳来跳去,极乐迪斯科。
对玩家来说,这就是"AI犯傻了"。
对设计师来说,这是调试地狱——你只能盯着那堆状态图,猜它为什么跳到这里。你想让角色行为看起来聪明一点,但你先得回答一个更基础的问题:它为什么这么笨? ╮(╯▽╰)╭
注: 上古卷轴5的Radiant AI实际上是一个比纯FSM更复杂的多因素系统(详见第二章2.5节)。但这里用它来点出一个更普遍的问题——当一个AI的行为由多个分散的规则驱动时,连设计者自己也难以追踪决策链条。这个困境,不限于FSM。
FSM的这三个矛盾——改不动、走不远、看不懂——其实都指向同一个根。
![]()
一切的根源:FSM的本质是穷举
你有没有想过,状态机在做什么?
从行为组织的角度看,它在做的其实就是一种变相的穷举——把所有可能的行为画成一个个圆圈(状态),再把所有可能的切换画成箭头(转换),AI就在这张图里面走。只要图画得够全,AI就能应对一切。
这不就是穷举吗。
这里的‘穷举’不是指遍历所有可能的输入序列,而是指开发者必须预先定义所有状态及状态间的所有合法转移——任何未定义的情况都会导致AI行为缺失或出错。
1987年,计算机科学家David Harel写了一篇后来被引用近万次的论文。他一上来就在吐槽——一旦系统达到一定复杂度,这套架构就会因为"所有状态必须以平面、不分层的方式排列",导致状态图变得"非结构化、不现实、混乱"(原话:unstructured, unrealistic, and chaotic)。
但严格来说,HFSM(分层状态机)本身就是FSM的一种扩展形式。现代游戏开发中,几乎不存在完全“平面”的FSM,大家都会用HFSM来规避状态爆炸。
1987年啊朋友。
那时候连《超级马里奥兄弟3》都还没在美国发售呢。就有人在论文里把FSM的棺材板给钉了一半了 (。-ω´-)。
但三十多年过去了,游戏行业到今天还在用这套东西。为什么?因为简单啊。画几个圈拉几条线,跑起来就能用。对当年的吃豆人来说,这就够了。
问题是,游戏已经不是1980年的游戏了。
2025年,名为Bragge的研究者做了一个对比实验:拿一个20个状态的普通FSM(其实已经是做了规避手段避免最坏情况的版本),跟一个用Statechart——就是Harel当年提出的改进方案,本质上是分层状态机——重构的版本对比。Statechart版本只需要10个"原子状态",加上合理的分层和组合,表达力完全一样,但代码重复大幅减少,状态图清晰度也明显提升。
这数据告诉你什么?
告诉你FSM的问题不是"状态太多了",而是"状态的组织方式效率太低"。把所有东西摊在一个平面上,20个状态就已经让人崩溃了。而一个3A游戏的NPC行为系统,动辄上百个状态。
你想想那个维护画面 (;´д`)。
所以问题根本不是什么"状态太多了"——问题是组织方式的效率太低。把所有东西摊在一个平面上的代价,不是线性的,是指数级的。
演进路线:从打补丁到换脑子
那业界怎么办?总不能一直这么硬撑着直到炸掉吧。
回顾整条演进路线,大致走了三步,每一步的逻辑都很直白——就是在解决上一步没搞定的事。
第一步,打补丁。
分层状态机(HFSM)就是最经典的补丁,第二章光环2那节我们已经见识过了。思路很直觉——别把所有东西摊平,分组。"战斗"是一个大状态,里头嵌套"攻击""防御""闪避",通用的切换逻辑在父级处理一次就行,不用每个子状态各写一遍。
有用吗?有用。但你再想想——它解决的是"连线太多",没解决"决策太死"。你还是在穷举,只不过穷举得聪明了那么一丢丢。
行为DAG(有向无环图,Directed Acyclic Graph)也是第二章聊过的补丁思路,本质上是让状态之间的连接更灵活。 但这些说到底都是在FSM的外壳上修修补补。
第二步,换脑子
大概在2000年代中后期,业界为了摆脱FSM的束缚,实际上是在两条并行的赛道上同时发力:一条通往行为树(Behavior Tree),另一条则通往GOAP(目标导向行动计划)。
关于行为树:虽然很多人将其成熟应用归功于《光环3》(2007),但真正的奠基之作其实是前文讲过的《光环2》(2004)。Bungie的AI程序员 Damian Isla 在GDC 2005上的经典演讲,系统性地展示了如何用树状结构管理复杂的AI逻辑,这直接奠定了现代行为树的地位。
关于GOAP:几乎在同一时期(2005年),Monolith Productions推出的神作《F.E.A.R.》则展示了完全不同的思路。它并没有追随《光环》的路径,而是大胆采用了GOAP架构。这意味着,早在《光环3》发售之前,《F.E.A.R.》就已经作为商业游戏的先驱,证明了AI可以像人类一样“思考目标”而非仅仅“执行脚本”。
在《F.E.A.R.》中,GOAP负责生成“计划”(Plan),但执行这些计划(比如移动、开火动画)依然需要底层的状态机来驱动。它们不是互斥的替代关系,而是分层协作关系(高层决策用GOAP,底层执行用FSM/动作系统)
这就引出了一个非常有趣的现象:决策层与表现层的彻底分离。
在《F.E.A.R.》这种GOAP架构中,FSM被压缩到了极致。玩过这款游戏的玩家可能完全没意识到——这款2005年神作的AI,底层状态机实际上只有三个状态:Goto(走过去)、Animate(播动画)、Use Smart Object(使用场景物体),仅此而已。
更绝的是,开发者自己在GDC论文里坦言,UseSmartObject本质上只是Animate的特化版本——“所以我们真正讨论的,是一个只有两个状态的FSM:Goto和Animate。”
Orkin的GDC演讲标题确实是“Three States and a Plan”,但他确实也说过“只有两个独特的状态”
3 vs 2?关于“Use Smart Object”是否能完全归并为“Animate”,取决于具体的引擎实现。在很多实现中,Use Smart Object涉及物理交互、场景查询等逻辑,并不仅仅是播放动画
两个状态。 看到这里你明白了吗?状态机不再负责定义复杂的“行为逻辑”(比如巡逻、追击、逃跑),它退化成了纯粹的“执行管道”或“动画播放器”。真正的智能——也就是“我该怎么做才能干掉玩家”——全部交给了上层的规划器(GOAP)去计算。FSM只负责把计算出来的结果(走路或播放动画)执行出来。
这种“规划器负责思考,状态机负责执行”的模式,正是现代游戏AI架构的核心思想。
![]()
第三步,让AI自己学。
这是最激进的一步,也是最远离传统开发流程的一步——干脆不画状态图了,让机器自己从数据里学。
具体怎么学、学到什么程度、效果怎么样——那是第四章的主菜。
不过在跳进去之前,有一个现实你得知道。
行业里到今天大量项目没有全面转向机器学习或GOAP,原因不光在技术上。工具链适配是绕不开的坎。你的策划团队习惯了行为树,你的调试工具是围着行为树搭的,你整个生产管线都基于行为树——你凭什么换?换了策划怎么调?QA怎么测?游戏AI领域的泰斗级人物Ian Millington在他的教材里专门强调了这一点:"Toolchains Limit AI."
工具链就是AI的上限。
技术从来不只是技术问题 ╮(╯▽╰)╭。
前面等着我们的是什么?
好了,现在咱们把整条线理一理。
这套规则系统在简单场景下完全够用,但随着游戏越来越复杂,那三个矛盾——改不动、走不远、看不懂——会越来越尖锐。业界沿着"打补丁→换脑子→让AI自己学"这条路一路摸过来,从分层方案到行为树、到效用评分、到目标规划,再到今天用机器学习训练角色行为……
每一步都在回答同一个问题:能不能让AI不再只是"被画好的圈和线"?
这个问题还没有被完全回答。
而第四章,我们来看看这个方向上最新的玩法——从拿视频数据训练状态机,到效用AI怎么算出"哪个行为最值得做",到GOAP怎么让角色自己规划目标,再到强化学习怎么让AI在一次次失败中成长。
套路之外,确实还有更大的世界 (๑•ㅂ•)✧。
四、前沿展望:游戏AI接下来吃什么?
从FSM到HFSM再到行为树,游戏AI的进化路径很清晰:开发者一直在找更强的表达能力和更低的维护成本。这条路还远没走完。
让AI自己学:从游戏视频里"逆向工程"FSM
传统的做法需要程序员手动编写每一个状态和切换条件。但游戏越来越复杂,纯手写的工作量实在吃不消。最近的研究正在改变这个现状。
在AAAI AIIDE 2025(AI与互动数字娱乐研讨会,AAAI旗下的游戏AI专门会议)上,阿尔伯塔大学的研究者 Dave Goel 和 Matthew Guzdial 发表了一个案例研究:从游戏视频中自动学习有限状态机(Learning Finite State Machines with Gameplay Video)[2]。
简而言之就是让AI来看人类玩家打游戏的录像,然后自动分析、总结出游戏中的状态和转移规则。不需要程序员手写,系统自己能"逆向工程"出逻辑结构。研究以经典Pac-Man为实验对象,成功从视频中学到了一个可运行的FSM模型,能在pygame里复现原版大部分行为逻辑。
这玩意儿的意义在哪?
降低开发门槛: 独立开发者不用精通AI编程也能做出聪明的敌人。录一段自己的游戏视频,工具帮你分析出合理的行为设计。
快速原型: 想测试一种新的敌人行为?不用写代码,先打一遍看看效果,系统自动分析出行为模式,快速迭代。
当然,目前这个阶段还比较早期。研究只在Pac-Man这一个相对简单的游戏上做了验证,生成出来的FSM往往比较粗糙,需要人工调优。但它指向了一个有意思的方向:也许未来开发工具能帮我们自动完成"行为分析→状态设计"的第一步。
下一代游戏AI:超越FSM的探索
尽管FSM及其变体至今还是主力,但行业对"更智能的对手"的探索从没停过。目前最前沿的几个方向:
效用系统(Utility AI): 让智能体根据多因素的"权重打分"做决策,而不是简单的if-else。比如"要不要躲掩体"取决于血量(越低权重越高)、距离掩体远近、敌人火力强度等多因素综合评分。这让行为更灵活、更像"有判断力"的玩家。
GOAP(目标导向行动计划): 给AI一个目标(比如"消灭玩家"),让它自己规划行动步骤(走到掩体后 → 瞄准 → 射击)。AI像下棋一样提前规划好几步。《F.E.A.R.》是GOAP的经典应用案例。
机器学习/强化学习AI: 用强化学习训练AI,通过成千上万次试错学最优策略。DeepMind的AlphaStar(星际争霸2AI)就是代表。但在商业游戏里,这方案最大的问题是不可控——你可能不希望Boss学会你没想到的阴间打法,更不希望它学会了"永远躲在角落不出来"这种"最优策略" (;´д`)。
这些方案各有各的挑战:机器学习AI太不可控、训练成本极高、性能开销大,GOAP在大规模NPC场景下需要额外的性能优化(如分布式处理和缓存机制)才能满足实时性要求[5],效用系统设计复杂(调参调到崩溃)。
所以在可预见的未来,FSM及其变体依然是游戏AI的主流选择。 不是因为最先进,而是因为最实用。游戏AI设计的第一原则不是"有多智能",而是"有多好用"——稳定运行、精确控制、让设计师做出想要的体验,这就够了。
毕竟,玩家要的不是一个"真正会思考"的对手,而是一个"打得过瘾、学得会、有挑战但不至于让人弃坑"的对手。FSM恰好能完美地实现这一点。
结语:下次被Boss虐的时候,换个角度看它
所以,聊了这么多,回到最初那个问题——
为什么Boss的招式循环总让人觉得像"对好暗号的套路"?为什么换个难度,同一个敌人就好像突然"变迟钝"了?
答案你已经知道了。
它不是在跟你玩心理战。它的每一次出招、每一次后退、每一次看似聪明的走位——背后都是一套确定性的规则在毫秒级响应。就像那台老电视:你按哪个键,它就跳哪个频道,播那个频道预设好的内容。
但这不是什么令人失望的真相。
恰恰相反——设计出一套能产生趣味、制造挑战、可预测且经得起千万玩家检验的行为规则系统,本身就是极其精妙的工程。
吃豆人四幽灵各有"性格",靠的不是什么高级算法,而是四套不同的目标计算公式跑在同一套状态框架上。魂系Boss的"难但公平",靠的不是AI有多聪明,而是FromSoftware用视听语言把规则直接"写"在了Boss的动作上,让你能看懂、能学会、能战胜。合金装备那个经典的"!",本质上就是一个状态转移的视觉反馈——它不是技术炫技,而是设计师在告诉你:"你现在暴露了,该跑了。"
这些都不是"智能"的胜利,是设计的胜利。
理解游戏的底层逻辑本身就是一种乐趣。我们打游戏,不就是在虚拟世界里找到现实世界给不了的掌控感吗?你知道Boss有套路,你知道它的状态机会在第三刀之后留出0.5秒硬直,正是你从被虐到通关的成长曲线。
而现在你还知道了一件事:在那个虚拟世界里,连Boss都有迹可循。(。-ω´-)
![]()
免责声明
受限于个人认知,文章可能存在不准确之处 ,这篇文章不是什么权威教材,也不是什么行业白皮书 (´・ω・),也可能会出现一些事实性错误。
所有评论区的纠错我都会逐一核实,并在文章中更新标注,感谢大家的严谨把关
它就是一个游戏AI技术话题的科普长文,数据来源我尽量标注清楚,但不同游戏的实现细节可能千差万别——毕竟每家工作室都有自己的"祖传代码"。
如果你读完想自己上手搞状态机,建议搭配正经教材服用。
以及,游戏AI这个领域迭代飞快,你现在看到的"前沿",可能一年后就是"基操"了 (摊手
参考文献与延伸阅读
学术论文
Harel, D. (1987). "Statecharts: A Visual Formalism for Complex Systems." Science of Computer Programming, 8(3), 231–274. → 第三章引用:首次系统性地指出扁平FSM在复杂系统中的"非结构化、不现实、混乱"问题,并提出了层次化状态图的解决方案。
Goel, D. & Guzdial, M. (2025). "Learning Finite State Machines with Gameplay Video." Proceedings of the AAAI Conference on Artificial Intelligence and Interactive Digital Entertainment (AIIDE), 21(1), 394–395. → 第四章引用:展示如何从游戏视频中自动提取FSM模型,以Pac-Man为实验对象。
Bragge, M. (2025). "An Empirical Comparison of Finite State Machines and Statecharts." Master's Thesis, Lappeenranta-Lahti University of Technology (LUT). → 第三章引用:20状态FSM与10原子状态Statechart的实证对比研究。
行业演讲 / 技术报告
Isla, D. (2005). "Managing Complexity in the Halo 2 AI System." Game Developers Conference (GDC) 2005. → 第二章引用:Bungie AI程序员分享《光环2》的HFSM/行为DAG设计思路,启发了后来行为树的诞生。
Orkin, J. (2006). "Three States and a Plan: The A.I. of F.E.A.R." Game Developers Conference (GDC) 2006. → 第三、四章引用:展示GOAP架构如何将FSM压缩到仅三个状态(Goto / Animate / Use Smart Object),让规划器负责所有行为决策。
教材 / 书籍
Millington, I. Artificial Intelligence for Games (3rd Edition). CRC Press. → 游戏AI领域入门圣经,涵盖FSM、行为树、寻路、决策系统等核心主题,适合零基础读者。
Rabin, S. (编). Game AI Pro 系列丛书 (1–4). CRC Press. → 业界一线开发者撰写的实战合集,涵盖大量3A级项目的AI设计经验与工程技巧。
技术博客 / 在线资源
Barr Group (2016). "Introduction to Hierarchical State Machines (HSMs)." → 第三章引用:清晰阐述了HSM的行为继承机制与传统FSM缺失的"行为共享"能力。
如果你对游戏AI开发感兴趣,推荐从 Millington 的教材入手,再配合《Game AI Pro》系列了解工业界实战。上面列出的论文和演讲在 Google Scholar / GDC Vault 上均可找到。
觉得这篇文章有意思?请点赞收藏加关注谢谢喵~
以及欢迎在评论区分享你被人工智障操作气到的经历,或者你用FSM思路通关的各种操作 (๑•ㅂ•)✧!
更多游戏资讯请关注:电玩帮游戏资讯专区
电玩帮图文攻略 www.vgover.com
