C# Behavior Tree -- 行為樹

來源:互聯網
上載者:User

(本博文可能比較老,如果發現外掛程式運行不起來,那麼可能是外掛程式需要的U3D版,與你現在用著的不一相容而導致)

在使用Unity 的外掛程式中,官方提供的Assets Store中,提供了大量了資源下載,其中有一款,收費外掛程式:Behavior Designer,這是收費的外掛程式;

我讓群友發了一份給我,這裡不作商業應用;

Unity Behavior Designer 外掛程式下載(點擊)


不過這個外掛程式,我在使用的時候,發現了一些問題:某個GameObject(MyPrefabObj)添加了BehaviorTree組件,添加自訂節點,該節並且公開部分欄位;

在BehaviorDesigner視圖的Inspector中設定了該節點的公開欄位值之後,把這個GameObject(MyPrefabObj)設為預投之後;

然後使用代碼:Instantiate方法執行個體該prefab(MyPrefabObj)後,發現,對應的BehaviorTree組件上對應的節點的公開欄位值,又還原成未賦值狀態;


Behavior Designer 的可視化編輯截圖:



可以看到,左邊的列表有好多種節點類類型;

粗略分為以下這幾種:


選擇節點 : SelectorNode; 順序節點 : SequenceNode; 條件節點 : ConditionNode; 並行節點 : ParalleNode; 等待節點 : WaitNode; 開關節點 : ToggleNode; 中繼節點 : InterruptNode(看到這,是否有點想到了:就像是:電路板一樣);

各節點特性:

選擇節點

在子節點中,找一個Success的,就不再往下執行;

for (child in children)  if (child.update() == Success)    return Success;return Failure;


順序節點

與選擇節點的條件上相反吧,就是中子節點中,找一個Failure的,就不再往下執行了;

除了以上這種特性,比較特殊的:要過了Conditions這關,再會處理Children;

onConditions():for (condition in conditions)  if (condition.excute() == Failure)    return Failure;return Success;onChildren():for (child in children)  if (child.update() == Failure)    return Failure;return Success;update:result = onCondition();if (result == Success)  return onChildren();return result;


條件節點

也就是上面我們所說的順序節點中的條件節點,具體的返回:Success/Failure的話,得依你自己的判斷而定;


並行節點

最簡單的節點,就是內部所有子節點都會執行一次;不管子節點的傳回值,最終都會返回Success;

等等,看你對自己的節點擴充,與分類的種類而定吧;


等待節點

在指定時間後,就會運行指定nextNode節點;


開關節點

對:中繼節點.enable = !enable控制類;就是不斷的開/關;


中繼節點

只有enable == true時,子節點才會繼續執行,通常使用:WaitNode, ToggleNode來搭配使用;


上篇FSM的,感覺沒啥人想瞭解;

這篇的BT(Behavior Tree)就不詳細解說了,更何況,現在都是把一些閒置時間擠出寫來的;

從簡單的DEMO中學習設計;是比較容易的;

如果從一個比較大的成品去研究,就比較麻煩了;


直接上代碼,自己看去。

BehaviorTestingProject

BehaviorTestingProject_1.1(感謝:artist963 兄,只在原來基礎上最佳化代碼、結構,並放一些BT邏輯封裝成類,方便閱讀、理解)


這個DEMO中,是簡單示範了,BOSS,尋找目標,靠近目標,自動攻擊,與巡邏;

行為樹結構大概是這樣:



像上面的AttackTarget(ActionNode)中,我們完全可以再寫成另一個嵌套的BT去處理;

總之,BT可以應用在,邏輯複雜度很高的系統都可以比較清晰的簡單化;

如:上面的BOSS AI;

或是,任務系統中的自動跑任務;

他就有點像,我們生活中的一些處理事件的邏輯整理,然後按邏輯先後,有條不紊的執行;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.