news 2026/7/13 21:58:07

教程3:Agent实例-–-behaviac

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
教程3:Agent实例-–-behaviac

原文

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

我们知道,面向对象程序编程的定义就是使用对象来做设计,对象即是类的实例。behaviac组件是基于Agent类及其实例来运转的,Agent类的实例加载和执行行为树,而在行为树的节点中又有可能用到了Agent实例的成员属性或方法。

在编辑器的节点属性窗口中,为了给该节点配置参数,首先需要选择一个实例,然后再选择该实例的成员属性或方法,如下图所示:

这些实例来自于如下三个方面:

  • Self:当前行为树根节点所配置的Agent类的实例,类似于程序语言中的this。
  • 成员实例:当前行为树根节点所配置的Agent类的成员属性,或是当前行为树的局部变量,需要是Agent或其子类类型。
  • 全局实例:在类型信息浏览器中编辑并生成注册代码的各种Agent或其子类的全局变量。

成员实例

对于成员实例,在上图所示的节点属性窗口中会根据当前行为树根节点所配置的Agent类型,自动列举出所有的成员实例以供选择。但在使用该成员实例之前,需要确保该实例已经赋过值,而不是空指针或引用。

在类型信息浏览器中添加新的Agent子类SecondAgent,并为其添加一个int类型的成员属性p2,如下图所示:

然后,为FirstAgent类添加SecondAgent类型的成员属性pInstance,如下图所示:

点击上图中的“确认”按钮后,可以看到FirstAgent类多了一个成员属性pInstance,如下图所示:

全局实例

对于全局实例,各种Agent或其子类实例的名字注册和绑定是为了支持单件(Singleton)或者类似确定的全局性实例(同一个类可能会有若干个实例而不是仅仅有一个实例),如player、camera、director等。

点击类型信息浏览器中部的“实例名称”右侧的“新增”按钮,添加SecondAgent类型的全局实例SecondAgentInstance,如下图所示:

点击上图中的“确认”按钮后,可以看到SecondAgent类的“实例名称”下拉列表中有了新加的全局实例SecondAgentInstance,如下图所示:

点击上图中右下方的“应用”按钮,就可以在行为树中分别使用这2个新加的成员实例和全局实例了。

应用

新建一棵行为树“InstanceBT”,依次添加序列、赋值、条件和动作节点,并为根节点选择FirstAgent类型,将动作节点配置为Self及其成员方法SayHello,如下图所示:

选中ID为1的赋值节点,在其属性窗口“左参数”的实例名中,可以为其选择Self、SecondAgentInstance和pInstance 3个实例了,如下图所示:

为其选择SecondAgentInstance及其成员属性p2,如下图所示:

类似的,选中ID为2的赋值节点,为其选择pInstance及其成员属性p2,如下图所示:

选中ID为3的条件节点,将“左参数”选择为SecondAgentInstance及其成员属性p2,将“右参数”选择为pInstance及其成员属性p2,将“操作符”选择为“>”,如下图所示:

配置完之后,得到行为树“InstanceBT”如下图所示:

导出行为树后,程序端就可以在加载和执行该行为树“InstanceBT”了。

C++版

在源码包的tutorials/tutorial_3/cpp/tutorial_3.cpp文件中,定义了3个变量,如下代码所示:

FirstAgent*g_FirstAgent=NULL;SecondAgent*g_SecondAgent=NULL;SecondAgent*g_ThirdAgent=NULL;

其中,g_FirstAgent用于加载和执行行为树“InstanceBT”,g_SecondAgent用于赋值给g_FirstAgent的成员属性pInstance,g_ThirdAgent作为全局实例供行为树“InstanceBT”中的节点使用。这3个变量的初始化,如下代码所示:

boolInitPlayer(){LOGI("InitPlayer : %s\n","InstanceBT");// 创建g_FirstAgent,并加载行为树“InstanceBT”g_FirstAgent=behaviac::Agent::Create<FirstAgent>();boolbRet=g_FirstAgent->btload("InstanceBT");g_FirstAgent->btsetcurrent("InstanceBT");// 创建g_SecondAgent,并将该实例赋给g_FirstAgent的成员pInstanceg_SecondAgent=behaviac::Agent::Create<SecondAgent>();g_FirstAgent->SetSecondAgent(g_SecondAgent);// 创建g_ThirdAgent,并将"SecondAgentInstance"绑定给该实例g_ThirdAgent=behaviac::Agent::Create<SecondAgent>("SecondAgentInstance");returnbRet;}

C#版

在源码包的tutorials/tutorial_3/cs/tutorial_3.cs文件中,定义了3个变量,如下代码所示:

staticFirstAgentg_FirstAgent;staticSecondAgentg_SecondAgent;staticSecondAgentg_ThirdAgent;

其中,g_FirstAgent用于加载和执行行为树“InstanceBT”,g_SecondAgent用于赋值给g_FirstAgent的成员属性pInstance,g_ThirdAgent作为全局实例供行为树“InstanceBT”中的节点使用。这3个变量的初始化,如下代码所示:

staticboolInitPlayer(){Console.WriteLine("InitPlayer");// 创建g_FirstAgent,并加载行为树“InstanceBT”g_FirstAgent=newFirstAgent();boolbRet=g_FirstAgent.btload("InstanceBT");Debug.Assert(bRet);g_FirstAgent.btsetcurrent("InstanceBT");// 创建g_SecondAgent,并将该实例赋给g_FirstAgent的成员pInstanceg_SecondAgent=newSecondAgent();g_FirstAgent._set_pInstance(g_SecondAgent);// 创建g_ThirdAgent,并将"SecondAgentInstance"绑定给该实例g_ThirdAgent=newSecondAgent();behaviac.Agent.BindInstance(g_ThirdAgent,"SecondAgentInstance");returnbRet;}

编译并执行,可以看到输出了“Hello Behaviac!”,说明行为树的执行结果符合我们的预期,Agent实例得到了正确的使用。

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

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

强力突破:Wan2.2-Animate-14B如何用混合专家架构重新定义AI视频生成

强力突破&#xff1a;Wan2.2-Animate-14B如何用混合专家架构重新定义AI视频生成 【免费下载链接】Wan2.2-Animate-14B 项目地址: https://ai.gitcode.com/hf_mirrors/Wan-AI/Wan2.2-Animate-14B 在AI视频生成领域&#xff0c;一个革命性的突破正在悄然改变游戏规则。Wa…

作者头像 李华
网站建设 2026/7/14 15:36:19

Nacos 面试题及答案整理,最新面试题

Nacos的核心功能有哪些&#xff1f; Nacos的核心功能主要包括以下几点&#xff1a; 1、服务发现与注册&#xff1a; Nacos支持服务的注册与发现&#xff0c;允许服务实例在Nacos中注册&#xff0c;并被客户端发现和调用。 2、配置管理&#xff1a; 提供动态的配置服务&#…

作者头像 李华
网站建设 2026/7/14 0:54:34

2026年河北省职业院校技能大赛“区块链技术应用”竞赛样题

2026年河北省职业院校技能大赛“区块链技术应用”竞赛样题 文章目录2026年河北省职业院校技能大赛“区块链技术应用”竞赛样题模块一&#xff1a;区块链产品方案设计及系统运维任务1-1&#xff1a;区块链产品需求分析与方案设计任务1-2&#xff1a;区块链系统部署与运维任务1-3…

作者头像 李华
网站建设 2026/7/14 15:33:59

PyBlueZ完整指南:Python蓝牙编程从入门到精通

PyBlueZ完整指南&#xff1a;Python蓝牙编程从入门到精通 【免费下载链接】pybluez Bluetooth Python extension module 项目地址: https://gitcode.com/gh_mirrors/py/pybluez PyBlueZ作为Python蓝牙编程的重要工具&#xff0c;为开发者提供了强大的蓝牙通信能力。这个…

作者头像 李华
网站建设 2026/7/14 15:34:09

2025降噪耳机排行榜前十名:漫步者领衔,国产耳机以高性价比破局

科技与性价比的完美结合&#xff0c;让降噪耳机从高端奢侈品成为了大众日常工具。无论是在嘈杂的地铁上、喧闹的办公室中&#xff0c;还是长途飞行的旅程中&#xff0c;一款优秀的降噪耳机都能为你创造一片宁静的听觉空间。2025年&#xff0c;中国耳机品牌凭借卓越的技术实力和…

作者头像 李华
网站建设 2026/7/12 0:11:45

GLM-4.5开源大模型:智能体开发的新时代引擎

GLM-4.5开源大模型&#xff1a;智能体开发的新时代引擎 【免费下载链接】GLM-4.5-Air-Base 项目地址: https://ai.gitcode.com/zai-org/GLM-4.5-Air-Base 在人工智能技术飞速发展的今天&#xff0c;智谱AI正式推出GLM-4.5系列开源大模型&#xff0c;这款专为智能体应用…

作者头像 李华