腾讯Behaviac Designer 和Unity连调行为树

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 CODEpublic 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();}}#endregionpublic void drift(){///<<< BEGIN WRITING YOUR CODE driftUnityEngine.Debug.Log("drift");///<<< END WRITING YOUR CODE}public bool IsInCollision(){
///<<< BEGIN WRITING YOUR CODE IsInCollisionreturn false;
///<<< END WRITING YOUR CODE}public void moveForward(){///<<< BEGIN WRITING YOUR CODE moveForwardUnityEngine.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.rhkb.cn/news/138709.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ATFX汇市:为什么英央行维持利率不变,而不是加息25基点?

ATFX汇市&#xff1a;9月21日&#xff0c;英国央行9月利率决议宣布&#xff0c;维持5.25%的基准利率不变&#xff0c;此前市场预期英央行将会加息25基点。消息公布后&#xff0c;GBPUSD五分钟内从最高点1.2300下跌至1.2239&#xff0c;跌幅61基点。英国央行会议纪要中提到&…

5.数学公式中-符号加粗

在 LaTeX 中&#xff0c;\boldsymbol 命令用于将数学公式中的符号或字母加粗显示&#xff0c;以突出显示它们或强调它们的重要性。通常&#xff0c;这个命令用于加粗矢量、矩阵、符号等。 要使用 \boldsymbol&#xff0c;您需要在数学模式中&#xff08;例如&#xff0c;在 \[…

技术分享| anyRTC音视频混流技术解析

一&#xff0c;简介 在视频通讯场景中&#xff0c;比如会议、直播等经常能看到图像合成的场景。图像合成是在指定的一块画面区域&#xff0c;在这个区域内&#xff0c;按画面的位置(坐标)布局&#xff0c;将区域中的每个视频画面的像素混合计算成一个像素&#xff08;RGB&…

Haproxy负载均衡集群 超详细 (附部署实例)

Haproxy 一、Web集群调度器1.1 常用的Web集群调度器1.2 常用集群调度器的优缺点&#xff08;LVS ,Nginx,Haproxy)1.2.1 Nginx1.2.2 LVS1.2.3 Haproxy 1.3 LVS、Nginx、Haproxy的区别 二、Haproxy2.1 简介2.2 Haproxy的主要特性2.3 Haproxy应用分析2.4 Haproxy的调度算法(负载均…

分享一个清理工具栏和插件的小工具

现在只要是经常用SolidWorks的&#xff0c;肯定是多多少少知道一些插件&#xff0c;有时候安装了很多个插件的时候&#xff0c;工具栏可能会乱串&#xff0c;而且还有可能出现插件删除了&#xff0c;但插件里面还能看到。 这其中的原因很简单&#xff0c;基本上都是反注册或者…

工业物联网大数据解决方案:排水设备远程监控和大数据统计系统

一、项目背景 给排水系统&#xff0c;作为城市的基础设施建设&#xff0c;是居民生产生活的必要保障。由于给排水系统通常站点零散分布&#xff0c;运维管理涉及的区域广泛&#xff0c;水位、流量、机泵运行等运行参数的测报&#xff0c;目前采取人工测量的&#xff0c;上令下…

html学习综合案例1

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>个人简介</title> </head> <body>…

【C++】STL之适配器---用deque实现栈和队列

目录 前言 一、deque 1、deque 的原理介绍 2、deque 的底层结构 3、deque 的迭代器 4、deque 的优缺点 4.1、优点 4.2、缺点 二、stack 的介绍和使用 1、stack 的介绍 2、stack 的使用 3、stack 的模拟实现 三、queue 的介绍和使用 1、queue 的介绍 2、queue 的使用 3、qu…

构建可维护的大规模应用:框架架构的最佳实践

文章目录 框架架构的重要性最佳实践1. 模块化设计2. 遵循SOLID原则3. 使用设计模式4. 异常处理5. 代码注释和文档6. 测试 Spring Boot 和 Django&#xff1a;关键框架示例Spring Boot&#xff08;Java&#xff09;模块化设计&#xff1a;SOLID原则&#xff1a;设计模式&#xf…

关于OpenFeign 接口参数定义的问题

文章目录 前言一、声明GET请求实际用POST &#xff1f;1.1 例子&#xff1a;1.2 原因&#xff1a; 二、GET请求放入了参数值却找不到?2.1 例子&#xff1a;2.2 原因&#xff1a;2.3 spring-mvc http 请求中为什么可以&#xff1a; 三、异步线程无法调用feign 接口 ?3.1 例子&…

Python经典练习题(一)

文章目录 &#x1f340;第一题&#x1f340;第二题&#x1f340;第三题&#x1f340;第四题&#x1f340;第五题 &#x1f340;第一题 有四个数字&#xff1a;1、2、3、4&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;各是多少&#xff1f; 这里我们使用…

【开关稳压器】LMR16030SDDA、LMR38010FDDAR,汽车类LMR43610MSC5RPERQ1低 EMI 同步降压稳压器

一、LMR16030SDDA 开关稳压器 IC REG BUCK ADJ 3A 8SOPWR LMR16030 是一款带有集成型高侧 MOSFET 的 60V、3A SIMPLE SWITCHER 降压稳压器。该器件具有4.3V 至 60V 的宽输入范围&#xff0c;适用于从工业到汽车各类应用中非稳压电源的电源调节。该稳压器在睡眠模式下的静态电流…

leetcode:70. 爬楼梯

一、题目 函数原型&#xff1a;int climbStairs(int n) 二、思路 此题运用递归思想。当只有1个台阶&#xff0c;那么只有1种方法爬到楼顶——跨一个台阶&#xff1b;当有2个台阶时&#xff0c;有2种方法爬到楼顶——跨一个台阶跨两次或直接跨两个台阶。当有3个台阶或更多台阶时…

vue之 h() 函数

前言 Vue推荐在绝大数情况下使用模板来创建HTML&#xff0c;然后一些特殊的场景&#xff0c;你真的需要JavaScript的完全编程的能力&#xff0c;这个时候你可以使用渲染函数 &#xff0c;它比模板更接近编译器&#xff1b; h()函数是什么 Vue在生成真实的DOM之前&#xff0c…

Java LinkedList类详解

目录 什么是LinkedList LinkedList的使用 LinkedList的构造 LinkedList的其他常用方法的介绍 LinkedList的遍历 ArrayList和LinkedList的区别 什么是LinkedList LinkList的底层是双向链表结构&#xff0c;由于链表没有将元素存储在连续的空间中&#xff0c;元素存储在单独…

[C++随笔录] vector模拟实现

vector模拟实现 基本结构天选之子构造拷贝构造析构operator 空间reserveresizesize && capacity 增insertpush_back 删erasepop_back 查 && 改swapoperator[] 源码 基本结构 // 可以是不同类型, 用类模板 template <class T> class vector { public:// 源…

画一个时钟(html+css+js)

这是一个很简约的时钟。。。。。。。 效果&#xff1a; 代码&#xff1a; <template><div class"demo-box"><div class"clock"><ul class"mark"><liv-for"(rotate, index) in rotatedAngles":key"i…

VBA技术资料MF59:从二维变体数组中删除一行数据

【分享成果&#xff0c;随喜正能量】小小的善业&#xff0c;能赢来大的利益&#xff0c;小小的恶业&#xff0c;同样也能招致严重的后果。这正如古语所云&#xff1a;“莫以善小而不为&#xff0c;莫以恶小而为之。。 我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效…

想学嵌入式开发,薪资怎么样?

想学嵌入式开发&#xff0c;薪资怎么样&#xff1f; 对于嵌入式工程师来说呢&#xff0c;它重点学习内容就是首先一定要打好基础&#xff0c;如果从编程语言角度来讲&#xff0c;那么可以在语言上选C或者C&#xff0c;你可以选择其中任何一门语言作为你的入门。 最近很多小伙伴…

Unity之NetCode多人网络游戏联机对战教程(1)

文章目录 1.什么是NetCode2.安装NGO 1.什么是NetCode 官网链接&#xff1a;https://docs-multiplayer.unity3d.com/netcode/current/about/ Netcode for GameObjects&#xff08;NGO&#xff09;是专为Unity构建的高级网络库。它能够在网络会话中将GameObject和世界数据同时发…