UE5 AI系统总结
不断完善中
一、理清AI系统各模块的工作逻辑
-
需要:Character/Actor作为被AI控制的角色或者物体,AI
Controller作为角色的控制器,AI行为树(AI BehaviorTree)作为AI控制的逻辑,黑板(Blackboard)作为AI逻辑中的大脑,存储需要用到的数据(例如决定行为的布尔值,寻物寻路的目标Actor) -
创建或者开发的流程:先创建一个AI角色(Character或者Actor)——>创建一个AI
Controller控制器赋予AI角色,明确AI角色受谁控制——>创建一个AI行为树和一个黑板,AI行为树中要指定黑板,明确用的是哪个黑板的数据——>AI控制器的事件图表中要使用EventOnPossess事件连接运行AI行为树的节点,明确AI控制器用到哪个AI行为树——>在黑板中创建行为树做决策时要用到的键——>写行为树的逻辑。下图是简单的依赖图:
-
行为树在编写时要区分好Seletor和Sequence节点,避免用错。行为树中只提供非常基础的任务,需要创建任务蓝图类,任务类中的事件图表要正确使用开始事件节点和Finish节点。任务类蓝图中需要修改或者用到角色的功能时,可以将该功能作为函数写在AI角色蓝图中。
-
AI行为树中要做分支用到的是装饰器,用来监控一个条件以判断是否执行它所装饰的序列。监控的是黑板中的键,要修改黑板键的具体值,可以在AI控制器或AI角色中写蓝图去修改。
-
任务蓝图中可能需要用到或者修改黑板键,就将它们提升为变量,然后设为可编辑实例,然后在AI行为树用到任务节点时再赋予具体的键值。(也可理解为C++的函数形参),下图为任务蓝图类中获取设置黑板键(蓝色的PatrolLocation,需要设置成可编辑实例):
-
AI控制器中需要用到或者修改黑板键,直接在事件列表中点右键寻找变量下的获取黑板,不需要指定具体时哪个黑板,因为已经为AI控制器指定了AI行为树,所以获取的黑板会运行时通过反射机制获取到AI行为树绑定的黑板,需要设置黑板键的话,从黑板调用SetValueAsVector这一类函数,函数中的键名需要与黑板中的键命是完全对应的。下图为AI控制器中获取黑板:(BlackBoard变量为右键-》变量-》获取黑板得到。紫色黑板键是提升为变量,注意默认值需要写与黑板键完全对应)