GameRes游资网授权发布 文 / 杨漱玉青
Behaviour Tree的AI模块现在被很多地方所采用,前段时间自己实现了一个AI套件在Unity,中间也遇到了不少坑,现在来总结一下心得。
网上有很多行为树AI的介绍和实现,在这就不重复了。
更新频率过快导致的行为表现异常
行为树模块需要周期性的更新,先说说连续几个周期存在的问题。如果这个周期满足条件是Actor A走到Actor B周围的随机位置的Action,于是Actor A在执行这个行为的时候先找到了一个Actor B的随机位置,然后走过去。下一个周期如果依然满足条件是执行这个Action,于是Actor A又立即重新执找了一个随机位置走过去。下下一个周期再次随机了…
如此反复就表现为Actor A在Actor B附近转来转去,如果更新频率过快,很有可能还会各种抖动的移动,非常突兀的效果。
不仅仅是走路这个行为,其他行为很有可能也遇到类似的情况。
有人会说,放慢AI的更新频率不就好了吗?
但是你很难把握这个AI更新频率到底是多少,如果过慢,就会出现Actor呆滞在原地显得呆板生硬,过快的话,就出现了上述描述的情况。经验上来说不能通过放慢AI更新频率解决这个问题。
我的解决方法是,会有一个额外的AI调度器,来决定这个AI行为实在会真的被执行。比如说对于走到Actor B随机位置的这个Action,如果上一次还是执行这个相同的Action,那么会检测一下上一次的Action是否执行完成了,如果执行完成了,那么才 会真正的执行。
这样尽管行为树不断决策出相同的Action,但是却不会造成Actor被更新过快的问题,并且也不会出现呆滞在原地的情况。
Action执行间隔问题
另外还有一个Action执行间隔的问题,比如说这段时间都满足攻击的Action执行,于是Actor A开始不断攻击Actor B,但是攻击频率如此之高可能是超过了理想的预期,比如说让游戏变得更难,这可能是设计者不想要的情况。
我在Action中添加了一个执行间隔的设计,让这个Action执行的时候每次都有间隔时间,下一次如果尽管还会执行到这个Action,但是如果还没超过每次执行的间隔时间,那么这个Action就不会被执行。
那么如果这个Action不执行的话,Actor又有可能会呆滞在原地,因为Ta需要等待间隔时间到达。为了避免这一种情况,我在单个Action中 添加了一个间隔使用的Action,当处于间隔时期时,就执行这个间隔使用的Action,比如很有可能是在原地随便走动一下。这样就避免了在攻击的间 隙,Actor呆滞的问题。
群聚
群聚算法比较简单,但是避免一堆怪物堆叠在一起,除了使用很耗性能的物理方式之外,还以为有其他方式,比如说群聚移动的目标计算的时候,单个Actor的坐标是被分隔好的,直接在目的地坐标上把Actor分隔开,这样避免了怪物的堆叠,而且性能比物理计算高很多。
AI Editor
因为采用了行为树,于是编辑器的设计也使用了节点式的表现,我是拿Qt 5制作的编辑器,保存成离线的json格式。毕竟各种Win32的Application Framework中,最熟悉的就是Qt。
如图:
这里展示的是一个很简单的普通怪物AI,当然还可以弄更复杂的BOSS级怪物的AI。
AI Debugger
目的是在AI Editor中实时的反应出AI执行情况,模仿Unreal的Blueprint Debugger的效果。这个功能还未完成,做了一个开头,也初步印证我的想法是可行的。
最早期的设想比较黑科技,类似与MonoDevelop和Mono Unity Debugger的实现,可以直接读取出Unity中的AI代码运行数据从而在AI Editor中反应。不过看起来难度和工作量都颇大。
于是真正开始实现的是另外一个方案:
制作了一个AISpy的Unity插件,使用C++。这个AI Spy插件因为被Unity所运行,于是Ta可以被动的被Untiy C#的AI代码告知当前的AI执行情况,比如说当前行为树执行路径,AI运行情况等等。然后AI Spy开辟一个进程间的内存共享区,将当前的AI数据放入这个共享区,然后AI Editor来读取这个进程的内存共享区数据即可得到当前的AI执行数据,从而在AI Editor中反应出当前的AI情况。
因为Unity使用了C#脚本,于是这里涉及到C++和C#的互相调用和数据传输的问题,于是这方面的知识也需要知道。
大概的执行流程图如下:
性能
AI的性能被重点的关注,因为毕竟是一个大型消耗性能的地方。在这里也做了很多的优化,甚至是非常小粒度的优化来试图提升性能。
首先是Action,Condition和其他一些行为节点映射到具体的真正的行为函数的实现,在早期的时候使用了C#的反射,一大好处就是简便轻 松,添加新行为函数之后直接在AI json脚本里面直接写即可,但是却带来了可观的性能开销。于是后来是通过手工的字符串到函数映射来做的,虽然说代码看起来很不好看,但是性能却提高了不 少。
另外一些关于性能优化的大概总结如下:
1.如果在编译期就能确定循环数目的,请直接手工展开语句,而不是使用循环。
2.正则表达式非常耗性能。
3.开方运算尽量少。
4.Unity的transform。position等等操作相关耗性能也是可观的,尽量减少。
5.减少性能密集型的时期,将工作量尽可能的分散开来。
6.虚函数尽可能的减少调用。
7.三目运算符要比if更快。
8.避免反射。
PS:大概就是这些,欢迎探讨~
相关推荐
基于BehaviourTree行为树编写的一个BossAI,包含巡逻,追踪玩家,追中到玩家后随机选着攻击事件,被玩家攻击后死亡。适合刚学习的BehaviourTree同学 当作入门的教程
Unity AI行为树插件-Behavior Designer-V1.5.11 Behavior trees are used by AAA studios to create a lifelike AI. With Behavior Designer, you can bring the power of behaviour trees to Unity! Behavior ...
Fluent-Behaviour-Tree, 基于fluent的C# 行为树库 Fluent-Behaviour-Tree基于fluent的C# 行为树库。如有背景,请参阅附附文章。了解行为树以下是一些帮助你理解行为树的资源:行为树( 维基百科)AI的行为树: 它们是...
专为Unity3D打造的AI行为树,包括ai编辑器 相关的博客文章地址为: 行为树(Behavior Tree)具有如下的特性: 它只有4大类型的Node: 复合节点 装饰器节点 条件节点 动作节点 更多详情、使用方法,请下载后阅读...
清华大学AI人工智能概论课程列表,高等学校人工智能通识课规划内容 清华大学AI人工智能概论课程 第10章 建筑智能化技术 含习题 共35页 .pptx 清华大学AI人工智能概论课程 第1章 AI时代的起航 含习题 共56页 .pptx ...
NULL 博文链接:https://freyja.iteye.com/blog/2196108
Behavior Designer 专注于行为树,这意味着每次更新都会有更好的行为树实现。 功能: • 一款直观的可视化编辑器 • 强大的 API 可视化运行时调试器 • 进行任务之间通信的变量 • 条件终止 • 内置在事件系统中 ...
BehaviourTree、UtilityAI、FSM基于ecs-framework开发的AI(BehaviourTree、UtilityAI、FSM)系统,一套已经非常完整的系统。大家可以自行看源代码来学习,项目当中也有好几个示例,如果对项目你有更多的解决方案可...
人工智能行业从CHAT-GPT到生成式AI(Generative AI):人工智能新范式,重新定义生产力.pdf
AI+人工智能革命 第一章 目录 Contents AI+人工智能整体结构 第二章 AI+人工智能技术能力 第三章 AI+人工智能解决方案 第四章 AI智能人工智能解决方案全文共50页,当前为第2页。 AI+人工智能革命 1 AI智能人工智能...
近几年,随着人工智能的迅速发展,人工智能对各行各业也产生...所以,今天专知小编给大家带来的是Google可解释人工智能白皮书《AI Explainability Whitepaper》,总共27页pdf,主要介绍谷歌的AI平台上的AI的可解释性。
清华大学AI人工智能概论课程列表,高等学校人工智能通识课规划内容 清华大学AI人工智能概论课程 第10章 建筑智能化技术 含习题 共35页 .pptx 清华大学AI人工智能概论课程 第1章 AI时代的起航 含习题 共56页 .pptx ...
中山大学 超级计算机学院 Ai人工智能课程 AI课程 第1章 关于AI人工智能 About AI 共79页.ppt 中山大学 超级计算机学院 Ai人工智能课程 AI课程 第3章 状态空间搜索的结构与策略 共58页.ppt 中山大学 超级计算机学院 ...
清华大学高级人工智能人才培养课程 AI人工智能 智能系统 课程体系 第1章 智能系统绪论 含习题 共28页.pptx 清华大学高级人工智能人才培养课程 AI人工智能 智能系统 课程体系 第2章 智能感知 含习题 共33页.pptx 清华...
AI人工智能应用介绍PPT.pptx AI人工智能开放平台解决方案共19页.pptx Ai智慧养老及智能家居综合解决方案共67页.pptx AI智能+人脸识别.pptx AI智能+人脸识别场景应用方案.pptx AI智能+人脸识别应用方案.pptx AI智能+...
MMORPG游戏的人工智能(AI)和行为树设计.doc
(AI人工智能教学行为分析评测教研系统及 舞台观摩课直录播系统设备采购项目) "序号 " "备"1.合同应在成交通知书发出之日起3个工作日内签订合同;2.以上全套设备包含安装、调试 " "注"、辅材辅料等一切费用,包含...
Behavior Designer 是专为每个人设计的行为树实现 - 程序员、艺术家、设计师。 Behavior Designer 提供具有强大的 API 的直观可视化编辑器,帮您轻松创建新任务。它还包含数百个任务,PlayMaker 集成和广泛的第三方...
人工智能AI学习总结
人工智能AI产业链全景图全文共16页,当前为第1页。人工智能AI产业链全景图全文共16页,当前为第1页。人工智能AI产业链全景图 人工智能AI产业链全景图全文共16页,当前为第1页。 人工智能AI产业链全景图全文共16页,...