当前位置: 首页 > news >正文

运行时端的执行流程-–-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()了。
http://www.cnnetsun.cn/news/52779.html

相关文章:

  • Week 29: 深度学习补遗:MoE的稳定性机制与路由策略实现
  • 25年12月14日复盘总结,大盘方向,操作建议,板块机会,实用干货
  • what?动态规划?
  • CommonJS 的缓存机制:为什么二次 require 得到的对象是同一个?
  • 跨标签页通信的五种方案:LocalStorage、BroadcastChannel 与 SharedWorker
  • JavaScript 与 CSS 变量交互:利用 setProperty 动态修改 CSS 变量实现主题切换
  • 2、UNIX基础入门教程
  • 6、互联网通信全解析:从邮件到多媒体的多元世界
  • vue基于Spring Boot框架 农产品销售供应商管理系统_m11i2507_
  • 10、UNIX系统管理:技术与实践指南
  • vue基于SpringBoot的健身房管理系统设计与实现_45vy0km9_
  • 父子进程关系与终止机制详解
  • Qt面试题合集(一)
  • Claude vs ChatGPT vs Gemini:全方位对比与选用指南
  • 大模型量化技术原理-ZeroQuant系列(一)
  • RISCV的异常和中断
  • vue基于Spring Boot框架的水果商城设计与实现_6628xfyb_
  • 【入门级-数据结构-3、特殊树:完全二叉树的定义与基本性质】
  • python用openpyxl操作excel-读取或创建excel文件
  • 刷题日记day5(二分+前缀和)
  • 005-AES:采招网
  • 基于python+django的在线考试系统(源码+lw+部署文档+讲解等)
  • C语言一维与二维数组名详解:从本质理解到高手应用
  • 当水印遇见AI:一场像素级的美学修复之旅
  • 软件测试是保障软件质量的关键环节,尤其在当前无法完全依赖形式化方法证明软件正确性的背景下,测试成为发现缺陷最主要、最有效的手段
  • 如何用AI快速生成Flink面试题答案?
  • 10分钟搞定:DeepSeek本地开发环境快速搭建方案
  • 豆包AI手机智能操控的硬核原理
  • CVE-2023-48795漏洞深度解析:原理与影响
  • 深入解析strspn:字符串扫描的精确尺子