Lua Behavior Tree For Unity3D(Lua描述行爲樹For Unity3D)

行爲樹(BTTree)筆記

爲何是Lua版本的行爲樹

目前國內的手機遊戲都標配熱更新功能,而遊戲AI天然也是MMO遊戲的一個標配,好比說掛機的AI,寵物的AI等等。git

提及如何用更簡單的方式開發AI功能,你們都會想到使用狀態機或行爲樹,它們能很大程度上幫助咱們理清思惟邏輯,讓AI變的更加有趣生動。github

目前不少Unity3D項目都是把Lua作爲腳本語言,好比咱們項目就是Lua作邏輯開發的3DMMOARPG的遊戲,本文分享一下咱們項目中使用的Lua版本行爲樹。json

 

behavior3

Behavior3框架提供了一組工具和開放規範,爲您建立、設計和使用行爲樹應用於遊戲、模擬、機器人和其餘基於代理應用程序。瀏覽器

  • 提供在線可視化地編輯器,而且提供編輯器源代碼,你能夠下載後部署到本地,而且擴展它功能。
  • 多代理體系結構,遵循一個簡單而強大的架構在一個正式的和一致的基礎上,優化控制多個代理
  • 使用一個開放的和簡單的格式來描述行爲樹(json),所以您能夠很容易地把它加入到本身的庫,工具或框架中

 

behavior3官網:http://behavior3.com/架構

behavior3的lua版本 :https://github.com/nottvlike/behavior3lua框架

 

注:本文部分截圖和behavior3官網或github的lua版本有出入,由於咱們項目組對lua版本的behavior3的作過修改。編輯器

 

編輯器

瀏覽器訪問:http://editor.behavior3.com/#/dash/projects函數

選擇Project - New Project - 輸入Name  - 點擊 Editor ,網站會對當前瀏覽器編輯的數據進行保存,無需註冊登陸就在在線編輯本身的行爲樹。工具

image

導入已有的行爲樹

選擇 Project - Import - Tree as Json,粘貼AI.json數據,完成由Json數據導入成行爲樹性能

 

導出行爲樹

選擇 Project - Export - Tree as Json,選擇所有內容並複製,粘貼到AI.json,完成由AI樹轉換成Json數據

 

行爲樹基礎知識

請提早了解行爲樹的基礎概念,我列幾點:

每一幀都會遍歷全部的節點 (從性能角度能夠每邏輯幀遍歷一次)

執行順序:從上往下,從左往右

 

Composites(全部可用的類型)

下面以實現一個簡單的寵物AI來解釋各節點的用法。注:我列出的節點類型解釋和使用方法是根據本身的理解所寫,並不是官方文檔的解釋。

 

 

BTPrioritySelector(優先選擇)

若是當前節點的前置條件沒有,則置空。

對於最上層的頂節點,可使用它

 

BTSequence(序列)

若是並行節點有多個子節點,同級的節點中,上一個返回true,下一個節點纔會執行。

示例:與主人距離大於18這個節點爲序列節點,有兩個葉子節點,當ClearBattleState返回True,TeleportToMaster纔會被執行

image

而只有序列節點的全部葉子節點都返回true,這個節點纔算執行結束,纔會進入下一個節點

 

BTParalled(並行)

 

 

 

BTParableFlexible(散列)

 

 

Actions(動做/執行函數)

放在最末端的葉子節點上,用於執行函數

能夠給它添加前置條件(isFarFromMaster()) ,給函數傳參數(DoFollowMaster(sqrDistance = 4)),示例:

image

 

給方法傳參數

若是在行爲樹給方法傳遞多個參數,在lua端如何接受傳遞的參數呢?

在lua的方法中:使用p.參數名1,p.參數名2,獲取相應位置的參數

 

在Unity3D中調試行爲樹

咱們目前是在C#端結合Unity開放的編輯器接口,編寫了GizmosHelper,便於在運行時對行爲樹進行調試。

主要原理:

讀取AI.jso的數據,獲取節點座標、標題,由點連線,線組成樹狀,還原成在behavior編輯器的樹狀

若是某個節點及其子節點的狀態爲Active,這條線使用綠色畫,不然使用白色畫。 

 

注意事項

在你還大不熟悉行爲樹的狀況下,最好不要爲Sequence或Parallel的子結點加前置條件,而是直接加在Sequence或Parallel結點自己上面。。。

前置條件能夠大量用在Priority結點或其子結點上這樣樹的邏輯會清晰一點另外,前置條件支持以「!」開頭,表示對緊跟在其後面的條件進行取反再判斷

相關文章
相關標籤/搜索