BehaviorDesigner是Unity上的一款行爲樹插件,不過這個插件是用C#編寫的,編寫出來的行爲樹也是依賴於C#的,不利於熱更,因此有必要寫一個lua版本的。工具
首先下載BehaviorDesigner這個插件,其中部分源碼編譯在Behavior Designer\Runtime\BehaviorDesignerRuntime.dll中,能夠使用.NET Reflector這個工具進行反編譯,而後將反編譯後的類文件保存,而後用VS打開,就能夠方便地查看源碼啦。這個插件是自帶pdf文檔的,因此這裏的源碼分析也是源碼結合文檔進行說明的。源碼分析
1.Tasklua
Task類有一套和MonoBehaviour類似的API(非繼承MonoBehaviour),是全部節點的基類。插件
a.OnAwake:只會被調用一次,當行爲樹enable時調用,相似於構造器。blog
b.OnStart:在節點開始執行時會被調用,通常用於重置變量。繼承
c.OnUpdate:每幀調用。索引
d.OnEnd:在節點執行返回成功或者失敗時調用。生命週期
e.OnPause(bool paused):當行爲樹暫停或者恢復時調用。文檔
f.OnBehaviorComplete:當行爲樹完成執行時調用。源碼
Task的生命週期:
2.ParentTask
ParentTask類是Composite節點和Decorator節點的基類。
a.CanRunParallelChildren:當前節點是否爲Parallel節點。
b.CurrentChildIndex:當前激活的子節點索引。
c.CanExecute:當前節點(父節點)可否執行。
d.Decorate:修改當前狀態。
e.OnChildExecuted:子節點執行時調用。
f.OnChildStarted:子節點開始執行時調用。
3.BehaviorTree
BehaviorTree是掛在GameObject上的,同時也是行爲樹的入口。BehaviorTree繼承Behavior,Behavior在Start方法會調用EnableBehavior,而後會建立一個空物體而且掛上Behavior Manager腳本。Behavior Manager會在Update方法中執行每一棵行爲樹(Behavior Manager管理整個場景的行爲樹)。