1.前言
在制作游戏时,会制作敌人、怪物、NPC等不被玩家所操作的对象,那么制作这些对象,就需要通过使用AI行为树来为他们编写各自的一些行为逻辑,比如敌人会寻找主角并攻击、怪物会在自己的领域巡逻等等。
2.组件说明
- NavMeshBoundsVolume:导航网格体边界体积,用作导航寻路,会自动计算可到达的位置,避开障碍物,可在项目设置中设置静态计算还是动态计算,动态计算是在运行过程中实时计算的,比较耗费性能,一般情况就使用静态。
- AIController:AI的控制类,可添加AI的一些感知组件、视力感知、听力感知等等。通过感知组件,可以做很多不同的行为,需要在AI中设置编写好的AIController
- BlackBoardData:黑板,设置一些行为树用到的成员数据
- BehavirTree:行为树,编写AI行为,需要在AIController中运行写好的行为树(绑定)。树的结构,从根开始往下执行,执行顺序是从上到下,从左到右
- Composites:合成器节点
- Selector:选择器合成节点。从左到右执行子项,如果其中一个子项执行成功则终止,如果子项成功,则选择器成功,如果全部失败,则失败
- Sequence:序列合成节点。从左到右执行子项,其中一个子项执行失败则序列失败,停止执行。序列的全部子节点执行成功,序列成功
- Simple Parallel:并行执行任务节点
- Decorator:装饰器,相当于条件判断,通过给合成器添加不同的条件,来确定是否执行该合成器
- Task:任务,也是行为树的叶子节点,具体的行为逻辑,在执行完一个任务之后,需要给任务标记完成执行
- Composites:合成器节点
3.简单的AI例子
使用UE4的TPS示例进行制作,做一个AI在地图中随机移动,看到玩家后朝玩家移动
- 创建导航网格体边界体积
- 在左侧“放置Actor”面板中,将组件拖拽到场景中,并调整缩放,填满地板区域,按P键可以查看导航网格体的绿色区域
- 创建AI蓝图
- 将小白人的蓝图类拷贝一份,放到我们自己的文件夹中,并起名AI_BP,并删除蓝图中的所有逻辑,同时删除摄像机组件,将细节面板中将Pawn类别下的自动控制玩家改成“已禁用”
- 创建AIController
- 新建蓝图类,在“所有类”中搜索AIController,并创建蓝图,名为AIController_BP
- 打开蓝图,在左侧添加AI感知组件(AIPerception)
- 我们这个例子中只用AI的视力感知,所以需要设置使用哪个感知,选中AIPerception,在细节面板中,AI感知类别下面的感官配置,添加一个元素,选择AI视力配置
- 可以配置不同的感官配置,伤害、视力、听力、触摸等等,这里我们只用视力
- 点开Sense,可以配置视力感知的一些参数,还需要在归属(阵营)检测上勾选中立方,这个阵营可使用C++进行重写,不同游戏有不同的设置
- 打开事件图表,添加感知事件更新的逻辑
- 创建黑板
- 在资源管理器中右键-人工智能-黑板,创建一个黑板,并命名为AI_BB
- 打开黑板,添加一个布尔变量,isFindPlayer
- 创建AI行为树
- 在资源管理器中右键-人工智能-行为树,创建一个行为树,并命名为AI_BT
- 打开行为树,从根节点的黄色区域,按住左键拖拽出来,创建Selector合成器
- 从Selector黄色区域,拉出两个Sequencer
- 右键Sequencer,创建装饰器,选择Blackboard
- 选中黑板装饰器,右侧细节面板-黑板-键查询,分别选择已设置和未设置,黑板键选择我们在黑板中定义的isFindPlayer
- 创建任务
- 在行为树界面的上方菜单,点击新建任务,选择BTTask_BlueprintBase,创建两个任务,分别为AI_Random_Move_Task和AI_Find_Player_Task
- 打开AI_Random_Move_Task,在任务中做一个AI的随机移动
- 在左侧-图表-函数处,选择重载“接收执行”
- 在增加AI移动逻辑
- 打开AI_Find_Player_Task,在任务中做一个朝着玩家移动
- 和随机移动逻辑相同,将从导航网格中找点,改成使用当前玩家的位置点
- 将任务放到对应Sequencer下
- 从Sequencer黄色区域,拖拽连线,从Task中选择我们刚才写好的两个任务
- 添加找玩家的任务
- 添加随机移动的任务,并添加一个5秒等待时长
- 绑定行为树,在AI中绑定AIController
- 需要在AIController中运行我们的行为树
- 在AI_BP中,将控制改成我们写好的AIController
- 运行
- 将AI拖拽到场景中,运行就可以看到AI的随机移动,在看到玩家时会跟随玩家移动
4.总结
制作了一个简单的AI移动,来学习AI制作的基础流程和基础知识,后续逐渐深入的学习AI