BehaviorDesigner是Unity上的一款行為樹插件,不過這個插件是用C#編寫的,編寫出來的行為樹也是依賴於C#的,不利於熱更,所以有必要寫一個lua版本的。
首先下載BehaviorDesigner這個插件,其中部分源碼編譯在Behavior Designer\Runtime\BehaviorDesignerRuntime.dll中,可以使用.NET Reflector這個工具進行反編譯,然后將反編譯后的類文件保存,然后用VS打開,就可以方便地查看源碼啦。這個插件是自帶pdf文檔的,所以這里的源碼分析也是源碼結合文檔進行說明的。
1.Task
Task類有一套和MonoBehaviour相似的API(非繼承MonoBehaviour),是所有節點的基類。
a.OnAwake:只會被調用一次,當行為樹enable時調用,類似於構造器。
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管理整個場景的行為樹)。