引言
在代碼里面動態的操作單顆行為樹 以及 管理所有的行為樹,也是一個很重要的事情。
一、操作單顆樹
這是我們項目里面,一個敵人綁定了行為樹,自動創建的behavior tree 腳本。
紅框放大:
行為樹組件包含以下幾個屬性:

當我們有需要的時候,如何代碼操作這些變量呢?
(1)我們必須先找到要操作的樹
找樹的方法1:定義一個Public的 BehaviorTree tree = new BehaviorTree();,然后面板拖拽賦值。
找樹的方法2:定義一個privarte的 BehaviorTree tree = new BehaviorTree();,然后通過GameObject的Find查找物體,然后獲得物體上面的組件來得到的。
(2)代碼操作該樹
using BehaviorDesigner.Runtime.Tasks;//引用不可少
using BehaviorDesigner.Runtime;
public class Tree : MonoBehaviour {
public BehaviorTree tree = new BehaviorTree();
void Start () {
tree.enabled = false;
var a = tree.GetAllVariables();
tree.StartWhenEnabled = false;
var b = tree.FindTasksWithName("AI_Daze");
}
}
上面代碼只是簡單的演示一下,可以操作行為樹的數據。其實 面板截圖里面的所有變量都可以操作,除此之外,tree還有很多的屬性和方法都可以操作。
二、管理所有樹
當行為樹運行時,將會自動創建一個帶有行為管理器組件的新游戲對象,並且該對象上面綁有 behavior manager組件。此組件管理你場景中所有的執行的行為樹
你可以控制行為樹的更新類型,以及更新時間等等
Update Interval:更新頻率
- Every Frame:每幀都更新行為樹
- Specify Seconds:定義個一個更新間隔時間
- Manual:手動調用更新,選擇這個后需要通過腳本來調用行為樹的更新
Task Execution Type:任務執行類型
- No Duplicates:不重復
- Repeater Task:重復任務節點。如果設置成了5,那么每幀被執行5次
BehaviorManager.instance.Tick();
此外,如果你想讓不同的行為樹都有各自獨立的更新間隔的話,可以這樣:
BehaviorManager.instance.Tick(BehaviorTree);
更多方法,請查看BehaviorManager類