news 2026/6/10 16:15:31

教程7:行为树的连调-–-behaviac

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
教程7:行为树的连调-–-behaviac

原文

本文档描述的是3.6及以后版本,对于3.5及以前的老版本请参考分类“3.5”。

对于行为树的调试,behaviac提供了连调和离线调试两大功能。

连调功能是在游戏运行的时候,编辑器可以连上游戏,实时的查看树的运行情况、变量的当前值并可以设置断点等;而离线调试实际上是回放运行时所产生的log。

本教程主要介绍连调的过程和相关的功能说明,离线调试可以参考文章《调试功能的说明》。

连调需要游戏是开发版本(即宏BEHAVIAC_RELEASE没有被定义),发布版本下没有连调的功能,可以参考文章《版本说明》和《开发功能开关》。

打开目录tutorials/tutorial_7/workspace中的工作区,并打开类型信息浏览器,可以看到类FirstAgent有一个成员属性p1和两个成员方法Start和Wait,如下图所示:

点击上图右下方的应用按钮,在生成的FirstAgent.cpp文件中,填写Start和Wait的方法内容如下代码所示:

voidFirstAgent::Start(){///<<< BEGIN WRITING YOUR CODE Startcount=0;///<<< END WRITING YOUR CODE}behaviac::EBTStatusFirstAgent::Wait(){///<<< BEGIN WRITING YOUR CODE Waitcount++;printf("p1 = %i\n",p1);if(count==10000){returnbehaviac::BT_SUCCESS;}returnbehaviac::BT_RUNNING;///<<< END WRITING YOUR CODE}

打开行为树demo,可以看到该行为树如下图所示:

为了在程序启动时,等待编辑器连接上才往后继续执行,需要在tutorial_7.cpp文件中的InitBehaviac方法中,添加如下代码:

behaviac::Config::SetSocketBlocking(true);

如果需要修改端口号,需要添加如下代码:

behaviac::Config::SetSocketPort(60636);

为了在连调时,程序端能够发送消息到编辑器端,需要在游戏循环中执行Workspace::DebugUpdate()方法,如下代码所示:

voidUpdateLoop(){LOGI("UpdateLoop\n");intframes=0;behaviac::EBTStatus status=behaviac::BT_RUNNING;while(status==behaviac::BT_RUNNING){LOGI("frame %d\n",++frames);behaviac::Workspace::GetInstance()->DebugUpdate();status=g_FirstAgent->btexec();}}

另外,如果程序端是通过Workspace::Update()的方式来统一执行所有Agent实例的行为树,则不需要再额外调用Workspace::DebugUpdate()方法,详见文章《运行时端的执行流程》。

启动程序,可以看到如下图所示:

上面表示,程序端已经在开始等待编辑器的连接了。

点击编辑器工具栏中的“连接”按钮,如下图所示:

在弹出的“连接游戏”窗口中,设置相应的IP和端口号后,点击“确认”按钮开始连接游戏,如下图所示:

编辑器成功连接后,在左侧的实例节点列表中,会列出当前的Agent实例,如下图所示:

在“输出”窗口中,可以看到程序端发送过来的所有消息,编辑器也正是根据这些消息来相应的刷新当前的高亮执行路径和处理断点、刷新成员属性的当前值等,如下图所示:

鼠标双击实例节点列表中的节点FirstAgent_0_0,开始跟踪该实例的当前行为树的执行情况,可以看到行为树有了高亮的执行路径效果,表示当前返回Running的所有节点序列,如下图所示:

双击某个节点的左侧可以为该节点添加“进入”断点,双击某个节点的右侧可以为该节点添加“退出”断点,如下图所示:

上图中高亮的断点,表示当前行为树的执行已经停在该处。点击Timeline工具栏中的“继续”按钮或直接按F5快捷键,可以继续执行行为树,如下图所示:

在属性窗口中,可以查看当前实例的所有成员属性及其当前值,如下图所示:

为了方便调试,可以在上图中手工修改属性的值,该值会被发送到程序端,影响行为树的执行。

有关连调的使用还可以参考连调相关常见问题。

本教程相关的工作区和代码工程详见源码包的目录tutorials/tutorial_7。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 13:22:55

手把手拆解三菱PLC印字机实战项目

三菱PLC组装印字机完整项目资料 1、采用三菱FX3U,威纶通MT6071IP触摸屏 &#xff08; 2、有说明书&#xff0c;BOM零件表&#xff0c;电路图 3、程序有完整的注释&#xff0c;结构清晰明了。 很好的项目学习资料。 工业02-18.电气印字机电气最近淘到一套工业级印字机的完整项目…

作者头像 李华
网站建设 2026/6/10 13:43:43

QSharedMemory 变量在对象析构的时候要怎么处理

在Qt中使用QSharedMemory时&#xff0c;对象析构时的正确处理至关重要&#xff0c;主要涉及共享内存的释放和跨进程同步问题。以下是关键处理原则和步骤&#xff1a; 1. 自动析构行为&#xff08;Qt内置机制&#xff09; 自动detach()&#xff1a;当QSharedMemory对象销毁时&…

作者头像 李华
网站建设 2026/6/9 21:25:45

【免费领源码】Python/Mysql数据库+53824中国传统服装微信小程序的设计与实现+ 计算机毕业设计项目推荐上万套实战教程JAVA、PHP,node.js,C++、python、大屏数据可视化

摘要 本文旨在探讨基于Spring Boot框架的中国传统服装微信小程序的设计与实现过程。该微信小程序旨在为用户提供一个便捷、高效的线上购物平台&#xff0c;专注于中国传统服装的展示与销售。通过深入分析用户需求和市场趋势&#xff0c;我们设计了包含用户管理、服装分类、热卖…

作者头像 李华
网站建设 2026/6/10 8:12:52

django用Python设计自主学习系统

目录 摘要 演示视频 系统功能实现 代码实现 推荐项目 项目案例 项目开发总结 为什么选择我 源码获取 博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于…

作者头像 李华
网站建设 2026/6/10 8:14:02

Linux的shell命令

1.基础的shell命令在Linux系统中不同于window中的图形化操作&#xff0c;linux更多的是用的命令行的操作&#xff0c;下面我们来看看其中的一些基础shell命令。首先我们看下面这段命令解释一下其中的提示符&#xff1a;linuxubuntu:~$ sudo su [sudo] linux 的密码&#xff1a;…

作者头像 李华