【遊戲科普】你以爲Boss在思考?關於遊戲AI背後的有限狀態機

省流總結

趕時間的朋友直接看這兒 (๑•ㅂ•)✧:

  • 有限狀態機(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裏復現原版大部分行爲邏輯。

這玩意兒的意義在哪?

  1. 降低開發門檻: 獨立開發者不用精通AI編程也能做出聰明的敵人。錄一段自己的遊戲視頻,工具幫你分析出合理的行爲設計。

  2. 快速原型: 想測試一種新的敵人行爲?不用寫代碼,先打一遍看看效果,系統自動分析出行爲模式,快速迭代。

當然,目前這個階段還比較早期。研究只在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這個領域迭代飛快,你現在看到的"前沿",可能一年後就是"基操"了 (攤手

參考文獻與延伸閱讀

學術論文

  1. Harel, D. (1987). "Statecharts: A Visual Formalism for Complex Systems." Science of Computer Programming, 8(3), 231–274. → 第三章引用:首次系統性地指出扁平FSM在複雜系統中的"非結構化、不現實、混亂"問題,並提出了層次化狀態圖的解決方案。

  2. 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爲實驗對象。

  3. 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的實證對比研究。

行業演講 / 技術報告

  1. Isla, D. (2005). "Managing Complexity in the Halo 2 AI System." Game Developers Conference (GDC) 2005. → 第二章引用:Bungie AI程序員分享《光環2》的HFSM/行爲DAG設計思路,啓發了後來行爲樹的誕生。

  2. 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),讓規劃器負責所有行爲決策。

教材 / 書籍

  1. Millington, I. Artificial Intelligence for Games (3rd Edition). CRC Press. → 遊戲AI領域入門聖經,涵蓋FSM、行爲樹、尋路、決策系統等核心主題,適合零基礎讀者。

  2. Rabin, S. (編). Game AI Pro 系列叢書 (1–4). CRC Press. → 業界一線開發者撰寫的實戰合集,涵蓋大量3A級項目的AI設計經驗與工程技巧。

技術博客 / 在線資源

  1. Barr Group (2016). "Introduction to Hierarchical State Machines (HSMs)." → 第三章引用:清晰闡述了HSM的行爲繼承機制與傳統FSM缺失的"行爲共享"能力。

如果你對遊戲AI開發感興趣,推薦從 Millington 的教材入手,再配合《Game AI Pro》系列瞭解工業界實戰。上面列出的論文和演講在 Google Scholar / GDC Vault 上均可找到

覺得這篇文章有意思?請點贊收藏加關注謝謝喵~

以及歡迎在評論區分享你被人工智障操作氣到的經歷,或者你用FSM思路通關的各種操作 (๑•ㅂ•)✧!

更多遊戲資訊請關註:電玩幫遊戲資訊專區

電玩幫圖文攻略 www.vgover.com