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() 等等。
分别对应了上述两种方法。