Behaviac是游戏AI的开发框架组件,也是游戏原型的快速设计工具。支持行为树BT,状态机FSM,HTN等多种范式,方便的编辑和调试。支持全平台,适用于客户端和服务器,助力游戏快速迭代开发。
编辑器可以运行在PC上,操作方便直观可靠,支持实时和离线调试;编辑器可以导出xml,bson等多种格式,更可以导出C++,C#源码,提供最高效率。
运行时支持全平台,有C++和C#两个版本,原生支持Unity。
已被《天天炫斗》、《QQ飞车》、《全民突击》、《全民夺宝》、《九龙战》等游戏及其他更多预研项目使用。
编辑器和运行时
behaviac作为游戏AI的开发框架组件,有编辑器和运行时两个部分,这两个部分通过元信息(描述AI实例属性和能力方法的信息)交换信息。
元信息
元信息用来描述类型的属性和方法。运行时导出元信息,如下所示。编辑器中,该元信息作为基本的语法单位用来创建行为树。
<agent classfullname="framework::GameObject" base="behaviac::Agent" inherited="true" DisplayName="" Desc="" IsRefType="true"> <Member Name="HP" DisplayName="" Desc="" Type="uint" Class="framework::GameObject" /> <Member Name="age" DisplayName="" Desc="" Type="long" Class="framework::GameObject" /> <Method Name="GoStraight" DisplayName="" Desc="" Class="framework::GameObject" ReturnType="void"> <Param DisplayName="speed" Desc="speed" Type="int" /> </Method> <Method Name="TurnTowardsTarget" DisplayName="" Desc="" Class="framework::GameObject" ReturnType="int"> <Param DisplayName="turnSpeed" Desc="turnSpeed" Type="float" /> </Method> <Method Name="alignedWithPlayer" DisplayName="" Desc="" Class="framework::GameObject" ReturnType="bool" /> <Method Name="playerIsAligned" DisplayName="" Desc="" Class="framework::GameObject" ReturnType="bool" /> <Method Name="projectileNearby" DisplayName="" Desc="" Class="framework::GameObject" ReturnType="bool"> <Param DisplayName="radius" Desc="radius" Type="float" /> </Method> <Method Name="distanceToPlayer" DisplayName="" Desc="" Class="framework::GameObject" ReturnType="float" /> </agent>
在3.x版本之前的版本中,元信息必须通过运行时来导出,策划需要新的属性或方法时,必须等待程序员更新代码重现导出元信息后才能使用。而在3.x版本 中,可以直接在编辑器中创建一个类型,并且创建它的属性和方法,而且可以导出类型的c++或c#源码,这极大的加速了迭代的过程,从而把编辑器作为一个原 型设计工具。
编辑器
编辑器是一个可以运行在Windows平台上的编辑工具。
在编辑器内,使用鼠标或快捷键,可以添加、编辑、配置、修改行为树(包括FSM,或HTN),也可以实时或离线调试游戏的行为,既可以设断点,也可以查看或修改变量的值。
运行时
运行时有C++和C#两个版本,Unity使用C#的实现,像是cocos等使用C++的引擎或平台使用C++的实现。其具体逻辑是一致的,即加载编辑器中导出的行为树,解释运行之。
g_player = behaviac::Agent::Create<CBTPlayer>(); bool bRet = false; bRet = g_player->btload(pszTreeName); assert(bRet); g_player->btsetcurrent(pszTreeName); behaviac::EBTStatus status = behaviac::BT_RUNNING; while (status == behaviac::BT_RUNNING) { status = g_player->btexec(); }
导出和调试
在编辑器内创建好行为后,需要导出,然后运行时才可以加载运行。编辑器支持导出多种格式:
xml
bson
cpp
c#
其中xml和bson作为数据,可以被加载,而cpp或c#作为源码直接编辑链接进程序,用户可以根据需要选择使用最合适的格式。
功能
behaviac作为游戏AI的开发框架组件,主要是用来开发游戏AI。
behaviac的编辑器使用图形化的界面(Visual scripting)和操作,操作直观方便。
游戏中的NPC,小怪,老怪等等的游戏逻辑都可以通过behaviac来创建和开发。
behaviac并不限于开发游戏AI的游戏逻辑,也可以用来开发组队逻辑(Squad Logic),策略AI(Strategy AI),玩家Avatar,甚至关卡设计等各种游戏场景。
behaviac还可以用作原型设计工具,策划只是使用behaviac编辑器来设计类型安全的,表达严谨的游戏逻辑。
C#版本的运行时原生支持unity,behaviac可以在unity内开发游戏AI
在iOS平台,作为热更新的一种手段
C++版本支持全平台,不仅可以用在客户端,也可以用在服务器端。一套逻辑,可以根据情况分别在客户端,服务器运行,避免重复开发。
特性
behaviac是游戏AI的开发框架组件,也是游戏原型的快速设计工具
支持持行为树(BT),状态机(FSM),层次任务网络(HTN)等多种范式
编辑器可以运行在PC上,操作方便直观可靠
编辑器可以导出xml,bson等多种格式,更可以导出C++,C#源码,提供最高效率
支持实时和离线调试,可以设断点,查看或修改变量
编辑器通过socket和游戏连接实现实时调试,支持远程实时调试
运行时支持全平台(Windows/Linux/iOS/Android等),有C++和C#两个版本,原生支持Unity。适用于客户端和服务器,助力游戏快速迭代开发
支持热加载,可以不用重启游戏就更新行为树
中英文界面可选,元信息可以提供中英文显示信息
支持预制件(Prefab)、子树,方便重用共享
支持自定义数据类型,支持已有第3方库中的自定义类型
支持扩展节点类型
https://github.com/Tencent/behaviac 转载于:https://www.cnblogs.com/lilei9110/p/9897874.html
我们是一般打包时 仍旧放在Resources下, 思路就是:重载 behaviac.FileManager、先去找热更目录有没有这个xml, 有就加载外部文件,没有就直接按原来方式去Resources目录加载。 public class MyBehaviacFileManager : behaviac.FileManager { public override byte[] FileOpen(st
behaviac是游戏AI的开发框架组件,腾讯有提供源码。https://github.com/Tencent/behaviac 行为树由叶子节点和中间节点组成,从左到右依次是父子关系的节点:叶子节点主要是一些动作、条件和赋值等原子操作节点,包含了最基本的行为(如跑动、攻击等),当一个叶子节点被选择后,就会激活其对应的基本行为;中间节点主要是一些组合节点,代表逻辑单
behaviac是腾讯对行为树(Behavior Tree)的一个实现方案。该方案包括编辑器(Designer)和运行时库(Runtime):编辑器用来编辑和调试行为树,运行时库用来解释和执行编辑器生成的行为树。该项目目前已经开源,项目源码地址: Github托管:https://github.com/TencentOpen/behaviac CODE托管:https://code.csdn.ne
基于behaviac定制行为树编辑器的尝试 编辑器提供可视化操作窗口,操作方便,容易理解。 为什么选择behaviac *理论上,游戏开发前后端共用编辑器,对于使用者(开发人员、策划)来说,应该是最方便的,unity前端开发一般使用Behavior Designer(以下简称BD)插件编辑行为树,但是官方的BD,只为unity定制,不能导出xml、C++等数据格式,而behaviac可以满足这个
behaviac动态库运行出错 (金庆的专栏 2017.3.16) 游戏是静态链接的运行库,添加behaviac动态库后,运行出错: > ucrtbased.dll!free_dbg_nolock(void * const block, const int block_use) 行 996 C++ ucrtbased.dll!_free_dbg(void * block, i
有道笔记连接:https://note.youdao.com/s/LQNyqXGJ 本书的主要是对腾讯开源框架Behaviac分析和总结,并对C++的基础语法、高级特性举例学习。 Behaviac的名称来自Behavior和Logic的结合,它的优点是C++版本支持全平台,不仅可以用在客户端,也可以用在服务器端。一套逻辑可以根据情况分别在客户端和服务器运行,避免重复开发。
点击跳转
nebula3 是一个游戏引擎和开发框架,可移植的特性支持多平台,包括 iPhone。 http://code.google.com/p/nebula3-engine/
本项目是win32下大型客户端游戏的游戏辅助开发框架,由于它集成并包含了游戏辅助开发的各方面功能,称本项目为win32辅助开发的组件也可。 内含具体项目有fifa online3、疾风之刃、怪物猎人online、流放之路等,也有辅助帐号验证服务器,帐号查寻与管理工具,特征码识别,资源文件系统等。 本人现已转型,特发布此项目,旨在分享一份只供参考的多年工作经验与心血,若本项目中有些您认为闪亮的设计、
《头号玩家》的启发 看过《头号玩家》的朋友们应该都记得在2045年虚拟现实技术和人工智能技术多么的强大,然而虚拟世界对现实世界的影响和冲击也是不容小觑的,万一哪天人工智能控制了人类就像智子控制了基础科学一样那该怎么办呢?当然这有些开脑洞了,言归正传,个人觉得第一个真正的人工智能应该会出现在虚拟世界里,那么最直接的虚拟世界就是游戏世界,而且是网络游戏。 这个系列的设计 最终目标:做一款简单有趣的小游
你的常用的数据结构都有什么? HashMap和HashSet的区别? 怎么构造一个HashMap HashMap优势是什么? 还有什么需要注意的? 扩容机制,hash冲突? 如果你去设计一个Hash函数怎么设计呢? 一般 HashMap多线程情况下会出现什么问题? 怎么解决扩容死链的? 尾插会有什么问题? 数据错乱问题以外还有什么其他问题? 怎么解决这个问题? councurrentHashMap
此为在原版2048的基础上,添加了电脑AI解题,并稍微修改了UI添加按钮来触发AI。 AI的核心在/js/myAI.js里,相关函数在window.myPlugin里 核心算法是用dfs搜3步后使代价函数window.myPlugin.evalCost期望值最小的走法, 代价函数的设计目的是让块尽量按由大到小顺序堆叠在右上角,并合并。 实验效果是基本能保证到2048,偶尔到4096甚至8192(概率较小)。
本文向大家介绍Unity实现游戏存档框架,包括了Unity实现游戏存档框架的使用技巧和注意事项,需要的朋友参考一下 最近重构了一下我的存档框架。我在这里对实现方法进行简单的解析。注意这里主要演示算法,所以,效率上并不是最佳。一个游戏中,可能有成百上千个物体需要存储,而且有几十种类型,接下来就用一个简单的例子来解释。一个很简单的例子,有一个Unit(单位)类型,有一个Inventory(背包)类型,
本文向大家介绍Java游戏开发拼图游戏经典版,包括了Java游戏开发拼图游戏经典版的使用技巧和注意事项,需要的朋友参考一下 游戏介绍: 拼图游戏是一款经典的益智游戏,游戏难度分为 简单、正常、困难 三种难度,分别对应3*3,4*4,5*5布局,游戏开始前图片被随机打乱,空块位于最右下角,玩家通过点击空块周围图片或者按键方式对图片和空块进行相互交换,直到所有图片都回到原位即为游戏胜利。 本次制作的拼
我试图为一个棋盘游戏找到一个更好的启发式函数,我将在代码后指定其规则。我的评估功能是: 初始板持有绿色和红色令牌,如图所示。人工智能先移动,使用与你相反的颜色,攻击你的代币。在黑色单元上,令牌可以正交(左、右、上、下)或对角移动。如果是在白血球上,你只能正交移动。 当您将令牌移动到对手令牌旁边时,您将删除该方向上所有对手的令牌。例如,如果我将绿色令牌从 C4 移动到 C5,我将杀死 C-6 到 C