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

分别对应了上述两种方法。

 

posted @ 2018-10-30 21:51  激情1995  阅读(2682)  评论(0编辑  收藏  举报