遊戲AI之行爲樹的入門使用(一)

1 瞭解行爲樹

首先製作AI有很多種決策方式,比如 有限狀態機(Finite-State Machines),分層狀態機(Hierarchical Finite-State Machines),行爲樹(Behavior Trees),效用系統(Utility Systems),目標導向型行動計劃(Goal-Oriented Action  Planners),分層任務網絡(Hierarchical Task Networks) ,不同的決策方式針對不同的遊戲行爲,各有優缺點,可以擇優選擇,我們爲什麼要選擇行爲樹呢?行爲樹中的可擴展性是最優的,且靈活性可以適應任何不同的AI情況,其隨機性非常可視化判斷與調試,但是行爲樹顯而易見也有部分缺點,比如大量判斷耗時,且不一定是最優決策選擇。

2 走進行爲樹

行爲樹的每一個葉子 我們都稱爲節點,通過一個個節點來搭建一個樹結構,即數據結構的樹結構。通過樹結構的中序遍歷來將所有節點串聯在一起。其中沒有下一個節點的稱爲 子節點,有下一個節點的 稱爲父節點。

子節點 又分爲 行爲節點、條件節點。 父節點 分爲 裝飾節點、組合節點。其中在Unreal Engine中 條件節點被結合在 裝飾節點中。

通過這四種節點的不同排列組合 構建成了一顆行爲樹。

3 搭建行爲樹(基於unity的Behavior Designer行爲樹插件)

每一顆行爲樹都是從根節點開始

接下來要新建一個父節點,我們一般新建一個組合結點中的順序節點,要行爲樹從子節點按從左到右執行。比如:

接下來只要搭配子節點就完成了 一個簡單的行爲樹

這裏有一個父順序節點,一個條件節點一個動作節點 共同構成一個子節點。這裏表示滿足條件節點的條件就執行該動作節點的動作。

4 編寫節點

4.1 編寫父節點 

編寫裝飾節點 需要繼承Decorator  重寫CanExecute 來判斷子節點是否成功與失敗 重寫Decorate來判斷自己是否返回成功與失敗 例如:

編寫組合節點 需要繼承Composite  組合節點比較複雜,大體需要控制所有子節點的返回來確定自己的成功失敗返回值,通過重寫OnChildStarted(int childIndex) 來返回子節點編號,

重寫CanExecute()來判斷子節點是否成功與失敗來繼續執行下一個節點,重寫OverrideStatus來判斷自己是否返回成功與失敗 例如:

編寫子節點 

編寫條件節點 需要繼承Conditional 只要重寫OnUpdate 來判斷條件,選擇返回值即可 比如:

編寫行爲節點 需要繼承Action  只要重寫OnUpdate 來執行行爲,選擇返回值即可 比如:

 

 

後續繼續學習就看下章

遊戲AI之行爲樹的入門使用(二)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章