進階篇2-AI行為樹
來自專欄遊戲策劃入門常識11 人贊了文章
決定今天說點高級一點的東西,就是AI。(因為我最近在配置怪物的AI)
記得一開始接觸,覺得AI好高級啊,好難啊!看別人寫AI的文檔,覺得好複雜看不到。但其實你了解AI的核心之後,就會發現它是一個很簡單的邏輯。難點在於你如何設計。
網上找的一些AI相關的文章可以了解一下。我這裡盡量說的簡單和通俗易懂一些。
先問一下自己,AI 給誰用?用在哪裡?
當這個角色由電腦操控,做執行某種行為時,就需要AI。NPC,怪物,玩家掛機戰鬥時都會使用到AI。
代碼是怎麼運行AI的?
AI被稱為行為樹,是因為的的判斷類似一顆樹一樣,有很多分支。每個分支從上至下依次判斷到結尾,把判斷成功(true)的內容反饋給電腦。電腦就根據觸發true的順序逐一執行。
所有行為樹都有一個起始的節點,這個是默認有的,你需要不停的往右邊添加各種節點。
AI的判斷節點
簡單的來說AI的節點分為順序節點和選擇節點(有些人命名可能會不同,但作用是一樣的)
節點作用:節點的右側是用來連接各種其他的節點(順序、選擇、行為、判斷等),不同節點會有自己的一個判斷條件。
順序節點:
- 我右邊的所有節點,每一個都要返回true給我,然後我才會給我左邊的節點返回一個true。
- 如果有重新一條反饋false,那麼下面的內容我都不執行了,直接返回一個false給左邊。
選擇節點:
- 我右邊的所有節點,依次執行。
- 如果有false,那我還會繼續往下執行。直到所有的節點都返回false,我才會向左邊返回一個false。
- 如有有一個節點返回true給我,我下面的內容都不執行了,給左邊返回一個false。
AI的執行節點
這部分主要是程序寫的,或者是行為樹子彈的。
成功節點:直接返回true給你
相反節點:你是true,我就返回false。你是false,我就返回true。
判斷節點:這個策劃提的需求,你遊戲裡面AI需要進行什麼判斷才會執行什麼內容。如生命低於xx%。記住,這裡只是判斷,判斷後你需要有執行,就是行為節點的內容。
行為節點:就是你要告訴這個ai,你可以幹啥啦!釋放xx技能之類。如果他可以成功釋放就會釋放,不行的話,就算你的行為樹只有一個放技能的節點,也會因為技能系統的限制而放不出來。注意,這裡只是執行某種行為,不代表這個行為會成功的。
思考
當你要著手去設計一個怪物或者其他角色的AI時,你應該確定你這個設計面向什麼人群,遊戲類型的需要什麼樣的判斷和行為,可以自己先模擬一遍。
舉個限時中的例子:上班中的你要去吃午飯這個AI。
- 判斷:當前時間是否過了xx(判斷為假,則不執行任何行為,維持現狀)
- 上一步為真,則繼續判斷:大佬有沒有叫我開會。(判斷為真,則去開會)
- 上一步為假,則繼續判斷:我有沒有訂餐
- 上一步為真,則跳到行為執行:拿飯盒吃飯。
- 第3步為假,則執行去坐電梯去飯堂。
大概就是上面的套路。行為樹長什麼樣?我隨便網上隨便截個圖,然後再分析一下吧。
paralle1為平行節點,這個比較高級,反正我沒用到。它作用應該是進行了兩條平行的判斷,最後會返回兩個結果。我推測,這種節點的內容應該不會重疊的,只是一個用來判斷,一個用來執行之類。
- 從paralle1我們往上走,英文水平如狗屎的我也知道selector1是一個選擇節點(後面的數字只是給你看他們的順序而已,後面我都用中文描述)
- 選擇節點1 再往上,連到 順序節點2 ,先判斷「沒有目標或者目標死亡」。
- 為真(意思為:附近的確沒有任何目標了),則走到判斷 選擇節點4 ,再走到 順序節點7 ,後面兩個都為真就返回真,結束 選擇節點4。
- 如果為假,則目標指向最近的玩家(這是一個行為節點,行為樹階段不判斷真假,只是告訴電腦要執行這個行為。如果所有敵方目標都死了,這個就執行不了,會繼續走行為樹)
- 順序節點2 的目的,是要保證我周圍是沒有敵方玩家的話,我需要重新再沒有塔的範圍內選擇一個離我最近的敵人。如果我我有敵人,我就會給選擇節點1返回真,選擇節點3就不執行了,給平行節點1返回一個真,這個真的內容,就是執行我選擇一個最近的目標。
- 如果我沒有目標,那麼就要在 選擇節點1 往下走,看選擇節點3,它先連到順序節點5,先看判斷當前目標是不是塔,那麼就繼續選擇節點8,執行關於塔的一些行為判定和執行。
- 如果目標不是塔,就會走到順序節點6,重新將目標設回塔。
- 看到這裡,是不是很清晰了。在這個平行節點1的上方,就是選擇目標的一個判斷。先看有沒有目標,有就優先怎麼目標,沒有就選擇塔。
- 下方的我就不說了,讓你們自己去判斷吧!
進階閱讀http://www.aisharing.com/archives/86行為樹(Behavior Tree)實踐(1)- 基本概念行為樹(Behavior Tree)實踐(2)- 進一步的討論
推薦閱讀: