Unreal-Ai(基础概念)
理解框架
一个拟人化的AI对象一般由感知(sense)、规划(plan)和行为(action)三部分组成
前提(寻路原理)
要在场景中进行移动是AI的基本功能,但这种移动并非简单地从A点移动到B点
寻路包括:计算路径和躲避障碍
假设对象是静态,那么就需要用到寻路网格体(Nav Mesh Bounds Volume)
查看寻路网格:显示(show)-导航(Navigation),快捷键:P
修改寻路网格自动更新:EditorPreferences-Level Editor-Miscellaneous-Editing-update Navigation Automatically
一、感知
Ai感知系统两个关键组件: Ai感知组件和Ai感知刺激源
例子:以警察感知(看到)玩家为例
ai角色(警察)添加视角的感知控件,目标角色(玩家)添加被感知的敏感源。
ai角色就能感知到目标角色。ai角色有了感知功能,就能感知周围环境,收集信息,为做出决策提供信息。
AIPerception(Ai感知组件)
感知控件类型有:看到,听到,接触到,被伤害等
这里需要警察看到玩家,则使用的是视觉感知类型:AI Sight config
AIPerceptionStimuliSource(Ai感知刺激源)
这里需要可以被警察看到,需要注册一个视角的感知刺激源AISense_Sight
官方文档:https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/ArtificialIntelligence/AIPerception/
二、思考
利用黑板,行为树,compoise等节点,写出复杂的条件判断和处理。
BlackBoard 黑板:记录各种变量,可以理解为人的大脑,比如感知到玩家后,黑板中记录感知结果的变量就会被修改为True
BehaviorTrees 行为树:控制行为逻辑
行为树是由很多个节点组成,执行顺序是自上向下,自左向右。下面一一介绍节点
Composite node ,只有成功和失败两种结果,有结果就返回父节点。常用有以下两种:
1、选择器(Selector):从左向右执行子节点,遇到一个子节点成功就返回成功,不执行下一个节点。所有子节点都失败就返回失败。
2、序列(Sequence):从左向右执行子节点,遇到一个子节点失败就返回失败,不执行下一个节点。所有子节点都成功就返回成功。
三、行动
行动:思考有了结果,就去行动实施。用Task节点来实现,比如让ai角色move to ,roator,play animation等等一系列的具体的行动。
Task节点:有三种状态(运行,成功,失败)
常见命名规则以及调用关系
AI_xxx:Aicharacter(NPC)
AlC_xxx:Aicontroller(Ai控制器),在AI中的Details-Pawn关联AIC
BT_xxx:Behavior Tree(行为树),在AIC中的事件图标调用BT
BB_xxx:Blackboard(黑板),在BT中Details-Ai-BehaviorTree中调用BB
BTT_xxx:BTTask(任务),在BT中调用
Gameplay debugger
编辑器按钮设置/查看
Project Settings→Engine→Gameplay Debugger→Input→Activation Key(默认是按键:‘)
运行游戏后使用
1.打开Gameplay调试器后,可以点击Tab进入旁观者状态(脱离控制角色)
2.遇到NPC之前打开Gameplay调试器,再遇到NPC没有反应,需要遇到NPC再打开
Ai相关信息
控制器名称(Controller Name)显示所指定的Ai控制器类
Pawn名称(Pawn Name)显示所指定的Pawn类
移动模式(NavWalking)显示当前的移动模式
导航数据(路径跟随)(Nav Data(path following))显示Ai移动路径
行为(树)(Behavior(tree))显示行为树是否正在运行
活跃任务(Active task)显示指定的行为树中当前正在执行的任务
Gameplay任务(Gameplay tasks)显示队列中的任务数量
蒙太奇(Montage)显示当前活跃的动画蒙太奇
Perception
里面的圈代表当前AI检测范围,外面的代表失去目标范围(出此圈以后,Ai将不会再去尝试寻找玩家)
球体代表NPC最后看到(sight)玩家的位置,球体旁边的直线表示NPC视线
Nav Mesh
显示NPC此刻可用导航路径(会随着NPC移动变化)