UE代码-游戏AI-行为树LoadTree算法解析
UE代码-游戏AI-行为树LoadTree算法解析
首先第一步是看当前行为树是不是已经load过了,枚举LoadedTemplates,一个一个对比,有一样的就返回了
没有就只能新Load一个了
-
第一个目标是维护InitList,它是以获取树的深度优先搜索的信息,从Root节点开始调用InitalizeNodeHelper
-
将当前点的信息加入InitList(只有当前点是复合节点,进行下两个逻辑)
-
枚举当前节点身上的Service,并将Service的信息加入InitList中
-
枚举当前点的子节点
-
枚举子节点的装饰器,并将装饰器的信息加入InitList中
-
根据当前子节点的类型分成三种情况
-
当前子节点为子树节点(RunBehavior)时:枚举子树节点的装饰器,并将装饰器的信息加入InitList中
-
如果当前子节点是复合节点时:啥也不做
-
如果当前子节点是任务节点时:枚举子节点的Service节点,并将Service的信息加入InitList中
-
Tips:这里有个有趣的地方,对于任务节点service的搜索顺序在其前面,而对于子树节点和复合节点则在前面。
-
-
以子节点为根节点继续深度优先搜索,InitalizeNodeHelper
-
-
-
获取到InitList的信息后,初始化每个节点的NextExecutionNode,每个节点的NextExecutionNode也就是其树在深度优先搜索后的下一个节点。//用于调试
-
将InitList根据内存大小排序,以便更好的打包
-
处理节点中的内存信息(对内存大小做了一个前缀和)
-
处理好树的信息并存到LoadedTemplates中,树的信息为TemplateInfo,其中:
- TemplateInfo.Asset保存着UBehaiorTree
- TemplateInfo.Template保存着根节点
- TemplateInfo.InstanceMemorySize保存着所有节点的总空间大小
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2020-06-27 校内团队训练赛
2020-06-27 CodeForces - 940F 带单点修改的莫队