Unity 使用 Behaviac (一)behaviac下载及其简单的使用

PS:behaviac在3.6.x版本之后的有若干重大改动,若想了解可转至:【behaviac升级注意事项】
如果想要 behaviac直接调式项目的exe,脱离unity工程。请转至:【行为树调式项目exe包】
下面正式开始:

下载 behaviac3.6.39.unitypackage 以及 behaviacSetup.exe:
https://www.behaviac.com/language/zh/downloads/#3622_2017-3-2

(随便即可,我下载的是稳定版)
在这里插入图片描述

下载后,点击BehaviacSetup_3.6.39.exe,安装behaviac。然后将behaviac3.6.39.unitypackage导入项目中。
(behaviac3.6.39.unitypackage:是Behaviac运行时用到的代码)
本篇文章主要记录beaviac和行为树的整合,所以编辑行为树的步骤就略过了。如果不会编辑behaviac行为树的可以去搜一下,这种资料网上很多
(下图是供测试的行为树:其功能是每隔5s就打印一次数据)
在这里插入图片描述
编辑完行为树后,对其进行错误检查(快捷键Ctrl+M)。如果没有错则继续,出现错误请先解决错误。
(我的检查后发现:MyDebug函数有错,检查后发现声明该类型信息时,此函数的返回值为void,设置该返回值为:behaviac.EBTSatus类型。然后再进行错误检查,错误清除了。)

OK,下面我们就开始将其整合进unity中了。
首先你在声明类的时候有没有勾选生成代码,当前,无论勾不勾选都能实现我们想要的结果。这里就先讲一下勾选的:
勾选生成代码后,点击“应用”按钮,然后关闭类型信息面板
在这里插入图片描述

还是点击左上角:文件→导出全部,勾选XML和C#,点击导出
在这里插入图片描述
在信息区域根据打印日志,可检查是否导出成功
在这里插入图片描述
找到你这个behaviac项目的路径,下图所示:ZLSBehaviacTree,就是我的项目根目录。里面分为两个文件夹及一个xml文件
在这里插入图片描述
双击exported进去后发现:
在这里插入图片描述
第一个名behaviac_generated的文件夹,将其拖入你unity项目中,这是胶水文件,是与行为树的注册等相关的代码
还有一个行为树的xml文件(DebugTree.xml),也将其拖入工程,我将其放到了:Assets/Resources下

下图是我测试工程中的目录结构
1、behaviac文件夹是:一开始下载的behaviac3.6.39.unitypackage导入的。里面全部是脚本文件
2、behaviac_generated文件夹是刚拖进来的胶水文件
3、Resources下是刚拖进来的XML文件
在这里插入图片描述

找到Assets→behaviac_generated→trpes
这里的DebugAgent就是我在behaviac编译器中编辑行为树时的基于Agent的类,我们现在需要的就是要绑定DebugAgent。
在这里插入图片描述

打开DebugAgent类,在MyDebug函数里面写入自己的代码,在Awake执行时绑定行为树,代码如下:

using System;
using System.Collections;
using System.Collections.Generic;

public class DebugAgent : behaviac.Agent
{
	//行为树的名称
    public string btName = "DebugTree";
	//xml文件的路径,我放在了Assets/Resources下了
	public string xmlPath= "Assets/Resources/";
	
	private behaviac.EBTStatus curStatus = behaviac.EBTStatus.BT_RUNNING;

	public int intValue = 0;
	
 	private void Awake()
    {
        initBehaviac();
        initAgent();
    }
    
    private void initBehaviac()
    {
        behaviac.Workspace.Instance.FilePath = Application.streamingAssetsPath;
        behaviac.Workspace.Instance.FileFormat = behaviac.Workspace.EFileFormat.EFF_xml;

        RegisterInstanceName<DebugAgent>("DebugAgent");
    }

    private bool initAgent()
    {
        bool bRet = this.btload(btName );
        if (!bRet)
            UnityEngine.Debug.LogError("Behavior tree data load failed! " + btName );
        else
            this.btsetcurrent(btName );

        return bRet;
    }

    public void Excute()
    {
        // 调试模式可添加:behaviac.Workspace.Instance.DebugUpdate();
        curStatus = this.btexec();
    }

	public behaviac.EBTStatus MyDebug()
	{
        print(intValue);
        return behaviac.EBTStatus.BT_SUCCESS;
	}
}

回到Unity编译器将DebugAgent拖到任意一游戏物体上,inspector面板检查数据是否正确,运行程序:我的行为树逻辑就是每隔5秒intValue变量+1,并打印其当前值,效果如下:
在这里插入图片描述

PS:如果你的程序运行崩溃了,请检查行为树节点的返回值是否正确,例如:一开始时我的DebugAgent脚本中。MyDebug函数的返回值为:

 return behaviac.EBTStatus.BT_INVALID;

导致我的程序崩溃了,因为行为树返回逻辑有误,所以会出错。我将其改成

return behaviac.EBTStatus.BT_SUCCESS;

就可以了。

再次PS:
这两天一直在研究腾讯的behaviac的使用,网上的资料也很少,大部分都是官方出的,但是针对与unity的近乎于没有。所以在此记录下来。因为本人也是刚研究,虽然通了,但是不一定权威,也不一定正确。哈哈哈。所以如果哪位大佬路过发现写的不对了,本人虚心请教。谢谢。由于项目着急,所以先搞通了,若发现有问题,以后再做更新。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值