当前位置: 代码迷 >> 综合 >> Unity-Behavior Designer行为树插件学习笔记
  详细解决方案

Unity-Behavior Designer行为树插件学习笔记

热度:32   发布时间:2023-12-16 18:05:59.0

中文文档(不是很全,不过也够看了)
链接:https://pan.baidu.com/s/1ZJHU286-5qwbHhD9FbL4KQ
提取码:fxj1

下面是我自己学习是觉得比较重要的地方

一 .中断类型
在这里插入图片描述
Self :当一直在执行Log1时,CanSeeObject发生改变,Sequence会中断自身,然后执行Log2
LowerPriority :当正在执行Log2时,CanSeeObject发生变化,会中断Log2然后去执行Sequence里面的
Both :两种情况都包含

二 .如何使用其他节点的数据(同一树中)
方法一
1.在分享数据和使用数据的脚本中分别使用Share类型(例如:SharedBool,SharedTransform)的来定义数据变量;
在这里插入图片描述

在这里插入图片描述
share和普通类型的区别:share可以访问行为树中的局部变量,也方便为外部修改,普通类型只能在特定树特定节点去修改,share在使用的时候必须.Value去访问它的值,普通类型就不需要
2.在分享数据的脚本中对分享数据进行赋值,
3.在行为树面板中添加同样类型的数据变量
在这里插入图片描述
(4)在分享数据的节点和使用数据的节点,进行赋值操作,这样数据就传递过去了
在这里插入图片描述
方法二:
例如下面这样的 TaskA 和 TaskB

using UnityEngine;
using BehaviorDesigner.Runtime.Tasks;
public class TaskA : Action
{
    public TaskB referencedTask;public void OnAwake(){
    Debug.Log(referencedTask.SomeFloat);}
}
using UnityEngine;
using BehaviorDesigner.Runtime.Tasks;
public class TaskB : Action
{
    public float SomeFloat;
}

将这两个任务添加到行为树编辑器中:并在TaskA节点点击Select关联B

在这里插入图片描述
此时就可以在TaskA中使用TaskB的数据
Task 的引用也可以是数组引用

三 .变量同步器
在这里插入图片描述
1.指定GameObject,其中包含具有要同步的共享变量的行为树。
2.从弹出框中选择要使用的共享变量。
3.指定方向。如果箭头指向左侧,则您正在设置“共享变量”值。如果箭头指向右边,则您将获得“共享变量”值。
4.指定同步类型。当前支持以下类型:行为设计器,属性,动画器和PlayMaker。
5.其余步骤将取决于选定的同步类型。在此示例中,选择了“属性”,因此您需要选择包含要与“共享变量”同步的属性的组件。
6.单击添加。

四 .行为树的局部变量和全局变量
在这里插入图片描述

局部变量(不在行为树中也可以获取到)

在这里插入图片描述
全局变量
在这里插入图片描述
五 .自定义数据类型
定义

using BehaviorDesigner.Runtime;[System.Serializable]
public class SharedNew_Type : SharedVariable<New_Type>
{
    public static implicit operator SharedNew_Type(New_Type value){
    return new SharedNew_Type {
     Value = value };}
}[System.Serializable]
public class New_Type
{
    public int @int = 1;public bool @bool = false;
}

调用

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using BehaviorDesigner.Runtime.Tasks;
using BehaviorDesigner.Runtime;public class TaskB : Action
{
    public SharedNew_Type s_NewType;public float SomeFloat = 1;public override void OnAwake(){
    base.OnAwake();s_NewType.Value = new New_Type();Debug.Log(s_NewType.Value.@int);Debug.Log(s_NewType.Value.@bool);}}

六 .树的启用和禁用

tree.EnableBehavior(); //启用
tree.DisableBehavior(); //禁用

七 .制作流程(只是我自己的理解,可能有偏差)
1.找出所有单个完整的子树,并在面板上制作好(完整的子树例如:顺序执行的是否可以攻击的判断和攻击的行为)
2.确定各个子树和优先级,并依次排好序,(例如:胜利流程>攻击流程>移动流程)
3.确定各个子树之间关系选择合适的组合节点和装饰节点连接
4.测试所有情况是否符合设计要求

  相关解决方案