Unity 行為樹-共享變量


一、引言 

有以下小場景:

  節點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() 等等。

分別對應了上述兩種方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM