news 2026/7/12 12:10:31

优化及性能-–-behaviac

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
优化及性能-–-behaviac

原文

优化及性能

宏BEHAVIAC_RELEASE定义的时候是最终版,BEHAVIAC_RELEASE没有定义的时候是为开发版。

  • 在debug版中,BEHAVIAC_RELEASE缺省下没有定义的。诸如logging、socketing、热加载等开发功能是有效的。可以通过behaviac::Config::IsLogging和behaviac::Config::IsSocketing来控制是否要Log到文件或是否与编辑器的连接。
  • 在release版中,BEHAVIAC_RELEASE缺省是有定义的。诸如logging、socketing、热加载等开发功能都是没有定义的。
BEHAVIAC_RELEASE缺省下是否定义的说明

BEHAVIAC_RELEASE缺省下是否定义可以参考文章《构建说明》。

简单来说对于Cpp,当使用CMake的时候,BEHAVIAC_VERSION_MODE用来控制BEHAVIAC_RELEASE是否定义:

  1. Default:缺省模式是Debug下BEHAVIAC_RELEASE没有定义,而Release下BEHAVIAC_RELEASE有定义
  2. ForceUseDev:强制不定义BEHAVIAC_RELEASE
  3. ForceUseRelease:强制定义BEHAVIAC_RELEASE

而当BEHAVIAC_RELEASE有定义的最终版里,logging和socketing是关闭的,也不支持连接编辑器。

具体可以参考文章《开发功能开关》。

总之,针对效率可以有下述选择:

  1. 定义BEHAVIAC_RELEASE,从而不编译诸如logging、socketing、热加载等开发功能,提供最高效率,也不支持连调功能。
    • C++下,在_config.h中定义BEHAVIAC_RELEASE为1
    • C#下,在Assets目录下的smcs.rsp文件中,定义BEHAVIAC_RELEASE
    • 如果想选择打开或关闭调试功能而不是完全的关闭,则不需要修改任何关于BEHAVIAC_RELEASE的定义,通过behaviac::Config::SetLogging和behaviac::Config::SetSocketing来控制是否打开logging和socketing。
  2. 不使用xml或bson格式,而是使用C++或C#格式
    • C#下,还需要那些在行为树中使用到的Agent的成员都是public的(非public的成员即使通过C#代码访问也需要使用反射系统来进行,会导致GC Alloc以及性能损失)。
overhead

behaviac可以导出xml(bson),或者源码(cpp/c#),源码的效率要优于数据(xml/bson)的执行效率。实际上这里的效率都是指的behaviac本身的overhead,如果提供的方法本身效率很低,运行很慢,behaviac本身的overhead就可以忽略不计了,无论是选用导出何种格式都遇事无补,这个时候,最需要解决的是优化方法的执行效率。

如上图,尽管xml格式是cpp格式的大约2倍,但这个overhead实际上是非常小的,只有0.0000269秒,0.0269毫秒。(具体数据会因为测试环境的不同有差异)。

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

unity3d scene窗口选中物体, 在 hierarchy高光显示

在 Unity 中实现 “Scene 窗口选中物体时 Hierarchy 面板高光显示”,核心思路是监听 Scene 窗口的选择事件,并通过 Unity 的EditorGUIUtility和EditorWindow相关 API 主动高亮 Hierarchy 面板中对应的物体条目。以下是完整的实现方案:using U…

作者头像 李华
网站建设 2026/7/11 23:40:28

FOC开发工具学习

FOC开发工具使用 ST 提供的 FOC 开发套件——“X-CUBE-MCSDK”,来帮助我们生成 FOC 控制代码 。 X-CUBE-MCSDK:ST 推出的电机控制软件开发套件。其中包括永磁同步电机(PMSM)固件库(FOC 控制)以及 STM32 电机…

作者头像 李华
网站建设 2026/7/12 8:27:19

HyperLPR3 车牌识别(python3)

HyperLPR已经更新到了v3的版本,该版本与先前的版本一样都是用于识别中文车牌的开源图像算法项目,最新的版本的源码可从github中提取:https://github.com/szad670401/HyperLPR一、安装扩展 python -m pip install hyperlpr3 https://pypi.tuna…

作者头像 李华
网站建设 2026/7/10 5:41:24

234回文链表

2025_12_14 链表简单(虽然是简单但是链表的我总是卡呢) 234回文链表 思路:我想到的是递归或者倒转一半或者栈,再遍历检查回文,但是限制了空间就只能倒转一半,感觉写起来好麻烦www感觉写的不是很优雅&#x…

作者头像 李华
网站建设 2026/7/8 15:23:12

JS核心语法

特性varletconst块级作用域❌(函数级作用域)✅✅变量提升✅(可先使用后声明)❌(暂时性死区)❌(暂时性死区)重复声明✅❌❌重新赋值✅✅❌(声明时必须赋值)// …

作者头像 李华
网站建设 2026/7/12 4:39:09

分公司组织架构图在线设计 总部分支管理模板

良功绘图网站 (https://www.lghuitu.com ) 在企业规模化发展的进程中,分公司的设立成为拓展市场、优化资源配置的重要举措。而总部分支之间的高效协同,离不开清晰、科学的组织架构作为支撑。分公司组织架构图作为直观呈现管理层级、部门设置、权责划分的…

作者头像 李华