一、引言
有以下小場景:
節點A:發現了 敵人。 節點B:追逐敵人。
對於同一個敵人物體,節點AB之間是如何傳遞數據 的呢?
行為樹節點AB之間,需要一個中間變量Temp來傳遞數據。
A發現了敵人,將敵人的 數據傳遞給Temp,節點B再讀取Temp 的數據,對其進行追逐操作。
這個中間變量就稱之為共享變量。
那么節點AB是如何將數據傳遞給Temp 的呢?
AB中分別定義一個變量,類型為SharedGameObject。然后在面板里面,將其與Temp關聯,那么這兩個節點就打通了。(這是一個基礎簡單的數據傳遞方法)
二、行為樹變量介紹
1.共享類型
以下是行為樹支持的類型,Shared+類型。
不過需要在腳本頭部引入:using BehaviorDesigner.Runtime;
使用的時候,需要額外加上.Value就可以啦。
例如:
public SharedGameObject obj; //定義
obj.Value.transform.position; //使用
當定義了public類型的行為樹共享變量時,面版將會出現:
此時,Obj綁定的共享變量為None。可以通過下拉框選擇 共享的局部變量。 局部變量請看下條👇
2.局部變量
只有本行為樹才可以訪問。這些變量在本行為樹內,數據是共享的。
可以點擊Variables,輸入Name,選擇Type,然后點擊Add,即可 增加一個 局部共享變量。 MySeeObj就是我創建的GameObject類型的共享變量,並賦予了初始值(將Cube從面版中拖過來)
局部變量的取值和設置值:
behaviorTree.GetVariable("MyVariable");
behaviorTree.SetVariable("MyVariable",Value);
例如:
注意:在代碼 SetVariable("xxx",value) 之前,必須在面板中先創建xxx 變量。
3.全局變量
所有的樹,都可以訪問。
點擊 Unity的Tools--Behavior Designer--Global Variable
全局變量的取值和設置 與 局部變量類似:
三、總結
兩個節點之間互相傳遞數據:
1.分別定義共享變量類型的數據變量A、B,然后再面板里面創建 局部共享變量Temp,然后AB同時綁定Temp就可以啦。
2.利用behaviorTree.GetVariable("xxx"); behaviorTree.SetVariable("xxx"); 在代碼里面 取值和設置。
就像Unity里面,獲得數據 要么定義為public,然后從面板里面拖過去。 要么在代碼里面,GetCompent<xx>() 或者 Find() 等等。
分別對應了上述兩種方法。