news 2026/1/18 10:03:37

运行时端的执行流程-–-behaviac

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
运行时端的执行流程-–-behaviac

原文

在运行时端(下面以C++版来加以说明,C#版基本类似),整个组建的更新可以通过Workspace::Update()函数来执行,该函数主要包括两大功能:

  • 调用DebugUpdate()函数来更新一些连调和热加载相关的功能。
  • 根据m_bExecAgents来判断是否需要执行所有Agent实例的btexec()函数,可以通过接口Workspace::SetIsExecAgents(bool bExecAgents)对m_bExecAgents进行设置。

具体执行逻辑如下代码所示:

voidWorkspace::DebugUpdate(){this->LogFrames();this->HandleRequests();if(this->GetAutoHotReload()){this->HotReload();}}voidWorkspace::Update(){this->DebugUpdate();if(this->m_bExecAgents){intcontextId=-1;Context::execAgents(contextId);}}

对于C++版,行为树的执行可以调用behaviac::Workspace::GetInstance()->Update()来执行所有Agent实例的行为树,也可以单独调用Agent的接口btexec()来执行单个实例的行为树。

其中,Workspace::Update()会遍历所有的Agent实例并依次执行btexec(),但在自己的游戏项目中,可能在一帧中需要对某些Agent多次调用btexec(),而另一些Agent只需调用一次,这时候就需要单独调用Agent::btexec(),而不是统一调用Workspace::Update()。

Workspace::Update()在调用Agent::btexec()之前,会检查Agent::IsActive()是否为true,如果为false,那么btexec()就不会被调用。

此外,为了支持连调和热加载,请务必保证在自己游戏的更新函数中调用了DebugUpdate()函数。如果已经调用了behaviac::Workspace::GetInstance()->Update(),那么就不需要再单独调用DebugUpdate()。

上述示例代码虽然是C++,但对于C#,也都是同名的。

特别注意:对于C#版,behaviac.Workspace.IsExecAgents默认设为false。

  • 如果将behaviac.Workspace.IsExecAgents设为true,使用behaviac.Workspace.Instance.Update()集中进行更新,Agent自己的更新就不需要调用btexec()了。
  • 如果将behaviac.Workspace.IsExecAgents设为false,则不使用behaviac.Workspace.Instance.Update()集中进行更新,Agent自己的更新就需要调用btexec()了。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/16 2:28:03

教程8:结构体的添加和使用-–-behaviac

原文 本文档描述的是3.6及以后版本,对于3.5及以前的老版本请参考分类“3.5”。对于结构体类型的使用,包括新增全新的结构体和扩展使用已有的结构体。对于新增的结构体,又包括编辑器是否自动生成该结构体的代码。 实际上,我们将新…

作者头像 李华
网站建设 2026/1/11 19:51:44

JavaScript闭包终极指南:从原理到实战(2025版)

JavaScript闭包终极指南:从原理到实战(2025版)闭包是JavaScript的核心特性,也是面试高频考点与开发易错点。很多开发者只停留在“函数嵌套函数”的表层认知,却不懂其底层原理与实战价值。本文从“内存模型→语法定义→…

作者头像 李华
网站建设 2025/12/24 11:18:43

LangChain 1.0智能体核心组件全解析:从架构到实战

在人工智能飞速发展的今天,单纯的语言模型已经无法满足复杂任务的需求。就像一个聪明的大脑如果没有手脚,也难以完成实际工作。LangChain 1.0的智能体(Agent)正是为了解决这一问题,将语言模型与工具、中间件、记忆等组…

作者头像 李华
网站建设 2025/12/24 17:52:55

快速排序的理解与实践(c语言实现)

快速排序的理解与实践 排序是计算机程序中常见的操作,而快速排序以其高效性成为许多程序员的优先选择。第一次接触快速排序时,我被它巧妙的分治思想所吸引——将一个大问题分解为若干小问题,逐个解决后再合并结果。这种思维方式不仅适用于排序…

作者头像 李华
网站建设 2025/12/24 21:16:39

Product Hunt 每日热榜 | 2025-12-14

1. PlanEat AI 标语:人工智能将你的健康目标变成一个为期7天的菜单和购物清单。 介绍:大多数应用程序给你提供一堆食谱,而聊天机器人则让你淹没在文字中。PlanEat AI 将你的健康数据和饮食规则整理成一个可行的每周计划和分类购物清单&…

作者头像 李华