腾讯Behaviac Designer 和Unity连调行为树

news2024/11/25 20:18:33

1. 克隆源码

https://github.com/Tencent/behaviac/

2. 编译生成BehaviacDesigner.exe

3. 找到并打开BehaviacDesigner.exe(先不急着填弹出的路径workspace 设置框)

4. 新建一个Unity 空工程,并在此处下载behaviac unitypackage

5. Unity中导入该Unitypackage

6. 在Unity 工程Assets中创建Resources/behaviac/exported 文件夹

7. 回到第三步,设置工作路径如下

8. 创建一个行为树命名为Agent,创建一个agent的派生类叫Player(之后会生成一个Player.cs脚本里面包含的待实现的行为接口), 仿照下面完善该行为树,在对应节点上右键,添加断点。最后导出

注意,这个行为树中的两个wait()对调试很关键,其中数字是单位是毫秒,可以让整个树在这里等待一定时间,而这个时间内正好可以用来手动连接服务器进行调试。如果没有这个wait,那么一旦在unity中点击运行,行为树逻辑已经跑完,而BehaviaDesigner都没来得及连接到Unity.

9.查看Unity工程中的文件树

10. Unity创建一个空物体,命名为behaviac, 挂载Player.cs脚本

11. 用下面的Player.cs替换你的Player.cs

// -------------------------------------------------------------------------------
// THIS FILE IS ORIGINALLY GENERATED BY THE DESIGNER.
// YOU ARE ONLY ALLOWED TO MODIFY CODE BETWEEN '///<<< BEGIN' AND '///<<< END'.
// PLEASE MODIFY AND REGENERETE IT IN THE DESIGNER FOR CLASS/MEMBERS/METHODS, ETC.
// -------------------------------------------------------------------------------

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

///<<< BEGIN WRITING YOUR CODE FILE_INIT

///<<< END WRITING YOUR CODE

public class Player : behaviac.Agent
///<<< BEGIN WRITING YOUR CODE Player
///<<< END WRITING YOUR CODE
{
#region 格式化的内容,直接拷贝
    behaviac.EBTStatus _status = behaviac.EBTStatus.BT_RUNNING;
    private static string ExportedFilePath
    {
        get
        {
            string relativePath = "/Resources/behaviac/exported";

            if (Application.platform == RuntimePlatform.WindowsEditor)
            {
                return Application.dataPath + relativePath;
            }
            else if (Application.platform == RuntimePlatform.WindowsPlayer)
            {
                return Application.dataPath + relativePath;
            }
            else
            {
                return "Assets" + relativePath;
            }
        }
    }
    private bool InitPlayer()
    {
        behaviac.Debug.LogWarning("InitPlayer");

        bool bRet = this.btload("Agent");
        if (bRet)
        {
            this.btsetcurrent("Agent");
        }

        return bRet;
    }
    private bool InitBehavic()
    {
        behaviac.Debug.LogWarning("InitBehavic");

        behaviac.Workspace.Instance.FilePath = ExportedFilePath;
        behaviac.Workspace.Instance.FileFormat = behaviac.Workspace.EFileFormat.EFF_xml;

        return true;
    }
    void Awake()
    {
        InitBehavic();

        InitPlayer();
    }
    

    void Update()
    {
        if (_status == behaviac.EBTStatus.BT_RUNNING)
        {
            behaviac.Debug.LogWarning("Update");
            behaviac.Workspace.Instance.Update();//要想能调试,这句必须有
            _status = this.btexec();
            
        }
    }
 #endregion
    public void drift()
	{
        ///<<< BEGIN WRITING YOUR CODE drift
        UnityEngine.Debug.Log("drift");
        ///<<< END WRITING YOUR CODE
    }

	public bool IsInCollision()
	{
///<<< BEGIN WRITING YOUR CODE IsInCollision
	return false;
///<<< END WRITING YOUR CODE
	}

	public void moveForward()
	{
        ///<<< BEGIN WRITING YOUR CODE moveForward
        UnityEngine.Debug.Log("moveForward");
///<<< END WRITING YOUR CODE
	}

///<<< BEGIN WRITING YOUR CODE CLASS_PART

///<<< END WRITING YOUR CODE

}

///<<< BEGIN WRITING YOUR CODE FILE_UNINIT

///<<< END WRITING YOUR CODE

12. 点击Unity 运行,紧接着按照下图步骤在BehaviacDesigner端连接Unity(所有操作默认即可)

13. 最多等待20s, 可以看到BehaviacDesigner端断点被击中(断点从紫色变成黄色)

这里让这个断点重复50次,如果想让断点继续执行下一步,就点击左上角蓝色小三角

tips:

  • F9可以直接在节点上打断点,多次按F9就是取消断点
  • 代码中IsInCollision() 中return false;换成return true; 行为树逻辑就走了上面drfit() 而不是moveForward(). 可以自己试试。下面截图是我跑出来的效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1020308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#引用Microsoft.Office.Interop.Excel

1.添加相关包 在项目的引用上&#xff0c;鼠标右键点击&#xff0c;选择管理“NuGet程序包”&#xff0c;如下图所示。 2.搜索Microsoft.Office.Interop.Excel 打开后&#xff0c;按照下图所示进行操作。 3.查看引用 此时&#xff0c;在引用中&#xff0c;可以看见&#xff0c;…

K8s(Kubernetes)学习(五)——Service:ClusterIP、NodePort、LoadBalancer、 ExternalName

第五章 Service 什么是 Service为什么需要 ServiceService 特性Service 与 Pod 关联Service type 类型如何使用 Service多端口配置 1 什么是 Service 1.1 定义 官网地址: https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/ 将运行在一个或一组 Pod…

怎么推广自己抖店的商品?最适合0经验新手操作的办法,来看看

我是王路飞。 抖店开通后&#xff0c;想要把自己店铺的商品卖出去&#xff0c;就需要进行推广了。 但是怎么推广呢&#xff1f; 要么利用抖音的搜索和推荐流量&#xff0c;获取曝光&#xff0c;实现点击和转化。 不过这种玩法有个弊端&#xff0c;就是需要你有一定的电商经…

分布式事务-介绍

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

K8S:pod资源限制及探针

文章目录 一.pod资源限制1.pod资源限制方式2.pod资源限制指定时指定的参数&#xff08;1&#xff09;request 资源&#xff08;2&#xff09; limit 资源&#xff08;3&#xff09;两种资源匹配方式 3.资源限制的示例&#xff08;1&#xff09;官网示例&#xff08;2&#xff0…

QSlider风格设置

QT的滑动条在开发的过程中经常使用&#xff0c;默认的QSlider风格比较简陋&#xff0c;一般达不到UI设计的效果&#xff0c;本篇记录一个QSlider使用过程中风格的设置。 1.qss常用的字段属性 1.1背景属性 属性值意思background Background背景属性background-colorBrush背景…

【探索C++】string类详解

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…

pytest一些常见的插件

Pytest拥有丰富的插件架构&#xff0c;超过800个以上的外部插件和活跃的社区&#xff0c;在PyPI项目中以“ pytest- *”为标识。 本篇将列举github标星超过两百的一些插件进行实战演示。 插件库地址&#xff1a;http://plugincompat.herokuapp.com/ 1、pytest-html&#xff1…

浏览器缓存学习笔记

浏览器存储 示例&#xff1a;网页的搜索历史 application->Local Storage&#xff0c;数据通过key-value保存 保存数据 <button onclick"saveData()">点击保存数据</button><script type"text/javascript">let p { name: Jack, ag…

智慧食堂操作教程,建议收藏!

医院食堂作为医疗机构不可或缺的一部分&#xff0c;不仅要提供高质量、健康的餐饮选择&#xff0c;还需要为患者和医护人员提供便捷的用餐体验。 随着科技的不断发展&#xff0c;智慧收银系统应运而生&#xff0c;它已经在医疗机构中引起了广泛关注。智慧收银系统不仅为患者和医…

linux 设置打开文件数

可以使用下面的文件进行设置 /etc/security/limits.d/90-nproc.conf 先来看/etc/security/limits.d/90-nproc.conf 配置文件&#xff1a; [root ~]# cat /etc/security/limits.d/90-nproc.conf # Default limit for number of users processes to prevent # accidental fork…

【产品运营】如何提升B端产品竞争力(下)

“好产品不是能力内核&#xff0c;做好产品的流程才是” 一、建立需求池和需求反馈渠道 需求池管理是B端产品进化最重要的环节&#xff0c;它的重要性远超产品设计、开发等其他环节。 维护需求池有主动和被动两种。 主动维护是产品经理在参与售前、迭代、交付、售后、竞品分…

PMP项目管理课程介绍-2023

8个项目管理工具模板、60个项目管理甘特图标模板、赠送30本项目管理电子书 &#xff08;PMI-PMP&#xff09;国际项目经理认证 培训简章 “21世纪是项目管理的世纪” “战略规划项目管理企业竞争力” 课程背景 “PMP”&#xff0c;即Project Management Professional&#xff0…

Yolov5创新:NEU-DET钢材表面缺陷检测,优化组合新颖程度较高,CVPR2023 DCNV3和InceptionNeXt,涨点明显

1.钢铁缺陷数据集介绍 NEU-DET钢材表面缺陷共有六大类&#xff0c;分别为&#xff1a;crazing,inclusion,patches,pitted_surface,rolled-in_scale,scratches 每个类别分布为&#xff1a; 训练结果如下&#xff1a; 2.基于yolov5s的训练 map值0.742&#xff1a; 2.1 Incepti…

1978-2021年全国各省城镇与农村恩格尔系数数据

1978-2021年全国各省城镇与农村恩格尔系数数据 1、时间&#xff1a;1978-2021年 2、指标&#xff1a;城镇恩格尔系数、农村恩格尔系数 3、范围&#xff1a;31省市 4、来源&#xff1a;各省年鉴 5、用途&#xff1a;反应居民生活质量 6、指标解释&#xff1a; 恩格尔系数…

C++---链表

1、链表 1.1、链表的结构 每个链表开头都有一个头指针Head尾节点的指针域为NULL&#xff0c;用于判断此列表是否结束 如果一个链表开始就为NULL&#xff0c;那么该链表为空链表 链表中的先后不代表在真实内存中的位置&#xff0c;只是单纯的逻辑上关系 1.2、创建链表 我们首…

Spring常见面试题总结

什么是Spring Spring是一个轻量级Java开发框架&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题&#xff0c;以提高开发效率。它是一个分层的JavaSE/JavaEE full-stack&#xff08;一站式&#xff09;轻量级开源框架&#xff0c;为开发Java应用程序…

iPhone升级iOS17后待机模式不能用、没反应?这7个方法快速解决!

iPhone待机模式是苹果为iOS17版本加入的新功能之一&#xff0c;当我们不用iPhone 时&#xff0c;能将它随手放在一旁&#xff0c;并以横向全屏的方式观看时钟与App小工具资讯等。 不过有些果粉发现他们的iPhone待机模式不能用、没反应&#xff0c;照着步骤操作也无法进入iPhon…

MX6LL控制LED设备

注&#xff1a;本篇基于野火IMX6LL PRO开发板 一.什么是驱动程序 驱动程序&#xff08;Driver&#xff09;是一种软件&#xff0c;用于充当操作系统与硬件设备之间的桥梁&#xff0c;使它们能够互相通信和交互。驱动程序的主要功能是提供一个标准化的接口&#xff0c;使操作系…

从0搭建夜莺v6基础监控告警系统(一):基础服务安装

文章目录 1. 写在前面1.1. 官方文档传送门1.2. 部署环境 2. 服务安装2.1. 基础设置2.2. 安装中间件2.3. 安装 nightingale-v62.4. 安装 VictoriaMetrics2.5. 安装 Categraf 3. 部署总结3.1. 安装总结 1. 写在前面 1.1. 官方文档传送门 项目介绍 架构介绍 仪表盘 黄埔营培训计…