遊戲 AI 的行為樹設計:為什麼敵人會「假裝」聰明
這三類節點就像積木:組合節點是骨架,裝飾節點是關節,葉節點是肌肉。只要組合得當,就能堆疊出非常複雜的行為,而每個節點本身仍然保持單純。這正是行為樹「假裝聰明」的技術基礎——複雜來自組合,而非單一節點的智慧。
行為樹的核心運作機制
要理解敵人為什麼看起來聰明,得先搞懂行為樹是怎麼「跑」的。行為樹的執行通常採用tick(滴答)機制:每隔一段時間(或每個影格),從根節點開始,依照節點邏輯向下傳遞 tick,直到某個葉節點回傳 Running 或 Success/Failure 為止。
這種「由上而下、逐層求值」的過程,其實就是一套決策優先級的體現。越靠近根節點、越左邊的分支,優先級越高。設計師只要調整節點順序,就能改變 AI 的行為傾向,而不需要寫複雜的 if-else。
Selector 與 Sequence 的組合邏輯
Sequence(序列節點)的邏輯是「全部成功才算成功」。它會依序執行子節點,只要有一個子節點回傳 Failure,整個 Sequence 就失敗;全部成功則回傳 Success。你可以把它想成「待辦清單」:先走到目標、再檢查視野、再開火,任何一步失敗就中斷。
Selector(選擇器節點)的邏輯則是「有一個成功就算成功」。它依序嘗試子節點,第一個回傳 Success 的分支就勝出;全部失敗才回傳 Failure。這就像「優先級清單」:先試著攻擊,不行就追擊,再不行就巡邏。
把兩者組合起來,就能表達非常豐富的決策。以下是一個簡化示例:
Root
└─ Selector(優先嘗試高優先級行為)
├─ Sequence(戰鬥分支)
│ ├─ Condition:目標在視野內?
│ ├─ Condition:距離在攻擊範圍內?
│ └─ Action:Attack
├─ Sequence(追擊分支)
│ ├─ Condition:目標在視野內?
│ └─ Action:MoveTo(目標位置)
└─ Action:Patrol(預設巡邏)
這段結構的意思是:能打就打,打不到就追,追不到就巡邏。看起來很聰明對吧?但其實它只是幾個簡單條件與行為的排列組合。AI 並沒有「理解」戰鬥,它只是照著優先級清單跑流程。
Blackboard 與感知系統的整合
行為樹本身只負責「決策流程」,它不知道敵人在哪裡、血量多少、隊友是否活著。這些資訊由Blackboard(黑板)提供。Blackboard 是一個共享的資料儲存區,裡面存放著 AI 所需的各種鍵值,例如 TargetActor、LastKnownPosition、HealthPercent、AlertLevel。
行為樹的條件節點會讀取 Blackboard 的資料來判斷,行為節點則會寫入或更新資料。至於資料從哪裡來?答案是感知系統(Perception System),通常包含視覺(Sight)、聽覺(Hearing)、傷害感知(Damage Sense)等。
舉例來說,視覺感知會定期檢查「目標是否在視錐內、是否有視線遮擋、距離是否在範圍內」,若通過檢查,就把目標寫入 Blackboard 的 TargetActor。行為樹的戰鬥分支看到 TargetActor 有值,就會啟動攻擊流程。這種「感知→黑板→行為樹」的資料流,是現代遊戲 AI 的標準架構。
值得一提的是,感知系統通常不會每幀執行,而是以較低的頻率(例如每秒 2~5 次)輪詢,並搭配時間切片(Time Slicing)機制,把多個 AI 的感知計算分攤到不同影格,避免效能尖峰。這也是為什麼你有時會覺得敵人「反應慢半拍」——那不是笨,而是設計上的效能取捨。
為什麼敵人會「假裝」聰明?
這是本文的核心問題。很多玩家以為 AI 越聰明越好,但對遊戲設計師而言,「看起來聰明」遠比「真的聰明」重要。真正的最優解 AI 往往會讓遊戲變得無聊、挫折,甚至不可玩。以下幾個設計哲學,解釋了為什麼敵人需要「假裝」。
可讀性優先於完美最優解
遊戲 AI 的第一原則不是「贏」,而是「讓玩家看懂發生什麼事」。如果一個敵人真的採用最優策略——永遠躲在掩體後、精準預判你的走位、在你換彈時才進攻——玩家會覺得被玩弄,而不是被挑戰。
行為樹的設計因此強調可讀性(Readability):敵人的行為要有明顯的前搖、有可辨識的意圖、有合理的反應時間。例如敵人發現你之後,會先轉身、舉槍、喊話,再開火。這些「多餘」的動作在真實戰鬥中是不必要的,但在遊戲中,它們是給玩家的資訊提示,讓玩家有時間反應、有機會反制。
換句話說,行為樹裡的許多節點不是為了「效率」,而是為了「表演」。敵人的「聰明」是一種演出效果,而不是運算結果。
製造「壓迫感」而非「真實智能」
玩家感受到的「聰明」,往往來自幾個特定的行為模式:
包夾與側翼:敵人會從不同方向接近,讓你感覺被圍攻。
協同攻擊:一個敵人壓制、另一個繞後,形成戰術感。
記憶與追蹤:敵人會記住你最後出現的位置,甚至搜索附近區域。
反應與閃避:敵人會在你開槍後躲進掩體,讓你覺得它「怕了」。
這些行為在行為樹裡都可以用簡單的節點實現。例如「包夾」只需要在隊伍層級(Squad Level)加一個協調節點,分配不同的 FlankPosition 給每個成員;「記憶」只需要在 Blackboard 存一個 LastKnownPosition,並在失去視野後執行「搜索」子樹。
重點在於:這些行為的觸發條件與時機經過精心設計,讓玩家在對的時刻感受到壓力。真正的智慧運算不是必要條件,節奏感才是。
失誤與破綻的設計哲學
最有趣的設計哲學來了:好的遊戲 AI 會故意犯錯。
如果敵人永遠精準、永遠反應完美,玩家會感到無力。因此設計師會在行為樹裡加入「人為破綻」:
射擊誤差:子彈散佈角度隨難度調整,讓玩家有機會在彈雨中存活。
戰術盲點:敵人不會永遠選擇最優掩體,有時會「犯蠢」衝出來。
冷卻與疲勞:連續攻擊後會短暫停頓,給玩家反擊窗口。
這些破綻不是 bug,而是feature。它們讓戰鬥有呼吸、有起伏,讓玩家在「差點死掉」與「逆轉勝」之間獲得快感。行為樹的裝飾節點(如 Cooldown、Random Chance)正是實現這些破綻的利器。
所以當你覺得敵人「假裝聰明」時,其實它是在假裝不那麼聰明——精準地控制自己的笨,讓遊戲更好玩。這是一種更高段的設計智慧。
行為樹的實戰設計案例
理論講完了,來看看實際案例。以下兩個案例分別代表「基礎敵人」與「Boss 戰」的行為樹設計思路。
案例一:巡邏守衛的行為樹
巡邏守衛是最常見的基礎敵人,行為樹通常包含三個主分支:巡邏、警戒、戰鬥。
Root Selector
├─ Sequence(戰鬥)
│ ├─ Decorator:TargetActor 有效?
│ ├─ Selector(戰鬥內決策)
│ │ ├─ Sequence(近戰)
│ │ │ ├─ Condition:距離 < 2m
│ │ │ └─ Action:MeleeAttack
│ │ ├─ Sequence(遠程)
│ │ │ ├─ Condition:距離 < 15m 且彈藥充足
│ │ │ └─ Action:RangedAttack
│ │ └─ Action:TakeCover(找掩體)
│ └─ Action:UpdateLastKnownPosition
├─ Sequence(警戒)
│ ├─ Condition:AlertLevel > 0
│ └─ Action:SearchArea(搜索最後已知位置)
└─ Action:Patrol(沿路徑點巡邏)
這個結構的巧妙之處在於「警戒」分支。當守衛失去目標視野時,不會立刻回到巡邏,而是進入搜索狀態,走向 LastKnownPosition 附近隨機巡邏一段時間。這個行為讓玩家感覺守衛「記得」自己,大幅提升沉浸感。
而 AlertLevel 是一個數值型 Blackboard 鍵,會隨時間衰減。玩家躲藏越久,警戒值越低,守衛越可能放棄搜索。這種「漸進式遺忘」比「瞬間失憶」自然得多,也是行為樹搭配 Blackboard 的典型應用。
案例二:Boss 戰的多階段行為樹
Boss 戰的行為樹通常更複雜,因為需要處理「階段轉換」與「招式選擇」。常見做法是用一個根 Selector,依血量百分比切換不同的子樹:
Root Selector
├─ Sequence(第三階段:血量 < 30%)
│ ├─ Condition:HealthPercent < 0.3
│ ├─ Action:Enrage(進入狂暴,改變外觀與音效)
│ └─ Selector(高頻攻擊)
│ ├─ Action:UltimateAttack(冷卻中則跳過)
│ ├─ Action:DashSlash
│ └─ Action:AreaBurst
├─ Sequence(第二階段:血量 < 70%)
│ ├─ Condition:HealthPercent < 0.7
│ └─ Selector
│ ├─ Action:SummonMinions
│ └─ Action:RangedBarrage
└─ Sequence(第一階段)
├─ Action:MeleeCombo
└─ Action:Retreat(拉開距離)
這種設計讓 Boss 的行為節奏隨戰鬥推進而變化,玩家會感覺 Boss「越來越兇」,但其實只是行為樹切換了不同的分支。每個階段的招式組合都經過精心設計,確保有足夠的預警動作與輸出窗口。
更進階的做法是引入隨機權重與反重複機制:例如同一個招式不能連續使用超過兩次,或者根據玩家位置動態調整招式權重。這些都可以用裝飾節點與 Blackboard 資料實現,讓 Boss 看起來「難以預測」但又「有跡可循」。
行為樹的常見陷阱與優化
行為樹雖然好用,但也不是萬靈丹。實務上常見幾個陷阱,以下整理出來供你參考。
節點爆炸與維護成本
當一個行為樹長到數百個節點時,維護會變得非常痛苦。常見症狀包括:難以定位 bug、節點順序牽一髮動全身、企劃與程式設計師互相指責。
解法有幾個方向:
記住一個原則:行為樹的價值在於「可讀」,而不是「無所不能」。 如果某段邏輯用程式碼寫會更清楚,就不要硬塞進行為樹。
行為樹的除錯與可視化
行為樹最大的優勢之一是可視化,但前提是你有好的除錯工具。實務上應該具備:
Blackboard 監看視窗:即時查看所有鍵值,方便追蹤資料流。
執行軌跡記錄:記錄最近 N 幀的執行路徑,重播分析。
沒有這些工具,行為樹的除錯會退化成一場噩夢。很多團隊會自製 Debug HUD,這筆投資絕對值得。
結語:聰明的假象,是設計的藝術
回到最初的問題:為什麼敵人會「假裝」聰明?因為遊戲 AI 的目標從來不是「模擬真實智慧」,而是「創造好玩體驗」。行為樹提供了一套模組化、可視化、易於調整的決策框架,讓設計師能精準控制敵人的行為節奏、破綻與表演性。
那些讓你印象深刻的敵人——會包夾的守衛、會記仇的追兵、會階段變化的 Boss——它們的「聰明」往往來自幾個簡單節點的巧妙組合,加上精心設計的反應延遲、射擊誤差與戰術盲點。真正的高明之處,不在於 AI 有多會算,而在於設計師有多懂「什麼時候該讓 AI 笨一點」。
下次當你被敵人追得滿場跑、忍不住讚嘆「這 AI 真聰明」時,不妨想想背後那棵行為樹:它可能只是幾個 Selector 與 Sequence,加上一點刻意安排的破綻。而這,正是遊戲設計最有趣的地方——用簡單的規則,演出複雜的智慧。
如果你正在設計自己的遊戲 AI,記住這句話:不要追求最優解,要追求最有戲。 行為樹是你的畫筆,而「假裝聰明」是你最重要的構圖技巧。