狀態機和行為樹

2021-10-02 07:18:24 字數 1032 閱讀 1496

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

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

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

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

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

2、行為樹將npc的行為包裝為乙個物件,符合物件導向的設計理念。

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

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

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

6、行為樹的子節點執行時需要返回,返回型別有:false,true,running。

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

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

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

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

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

狀態機 狀態機0

近半年都忙於做專案,沒有太多的時間去整理和總結在專案中用過的技術 個人還是覺得技術需要總結提煉和沉澱的,忙到沒時間去總結提公升其實不 是什麼好事,這次講下狀態機,在戰鬥型別的遊戲中角色有多種不同的狀態,而狀態的切換錯綜複雜,23種設計模式中有一種模式叫做狀態模式,不過 這種模式是把狀態切換條件放到各...

AI邏輯實現 取捨行為樹還是狀態機

個人體會 狀態機來實現ai更符合我們思維的樸素表達,我想任何乙個有經驗的coder都能直觀得去寫乙個自己的ai狀態機。它用於一些簡單的ai其實是沒有大問題的,搜尋敵人,靠近,攻擊,死亡 用狀態機其實更加便捷。但是面對一些複雜的ai邏輯實現就會顯得比較繁雜。同時,當需要對現有行為邏輯進行擴充套件的時候...

python 狀態機 Python 狀態機

class statemachine def init self self.handlers 狀態轉移函式字典 self.startstate none 初始狀態 self.endstate 最終狀態集合 引數name為狀態名,handler為狀態轉移函式,end state表明是否為最終狀態 de...