狀態機和行爲樹

對遊戲NPC的行爲控制一般有2種,一種是狀態機,一種是行爲樹。

狀態機:

Unity對人物動畫的控制是基於狀態機的,如下圖:

可以看到,每個狀態除了包含自身的狀態行爲外,還需要和其他的狀態打交道,需要輸入狀態機之間切換的條件。因爲這一點,導致增加狀態會使得狀態機越來越複雜。

狀態機是一種網狀結構,耦合性很大。

行爲樹:

1、行爲樹是將遊戲NPC的行爲(走動,攻擊,跳躍)搭建爲一顆樹,父節點是行爲分支,葉節點是行爲的具體表現。

2、行爲樹將NPC的行爲包裝爲一個對象,符合面向對象的設計理念。

3、行爲樹的好處是將行爲邏輯和狀態數據剝離,降低耦合,方便策劃配置,而無需對每個人物的行爲進行代碼控制,提高了可視性,簡化問題排查,提高效率。

4、行爲樹把行爲和狀態數據剝離,可以這麼理解,比如NPC要跳躍,那麼前提條件可以是:已完成上一個動作,HP大於0,下一個行爲狀態設置爲跳躍。把這些條件看作狀態數據,把跳躍的Animation看做行爲,那麼當要切換行爲的時候,就不用去管上一個狀態是什麼行爲、和上一個狀態是什麼關係。構建出來的行爲樹,只需要判斷當前的狀態數據是否滿足跳躍的條件,滿足就執行行爲,不滿足就返回false。

5、行爲樹是樹狀結構,相對於狀態機的網狀結構來說耦合性更低。

6、行爲樹的子節點執行時需要返回,返回類型有:False,True,Running。

7、行爲樹的父節點存在多個情況,1個節點和多個節點,當父節點有多個字節點時,有幾種組合順序:

並行執行:並行執行多個子節點的行爲。

隨機執行:從多個字節點中隨機選擇一個執行。

選擇執行:從多個字節點中按照順序選擇一個能執行的行爲。

順序執行:按照順序依次執行多個子節點。

發佈了53 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章