UE4的AI行为树基础知识

1.前言

        在制作游戏时,会制作敌人、怪物、NPC等不被玩家所操作的对象,那么制作这些对象,就需要通过使用AI行为树来为他们编写各自的一些行为逻辑,比如敌人会寻找主角并攻击、怪物会在自己的领域巡逻等等。

2.组件说明

  • NavMeshBoundsVolume:导航网格体边界体积,用作导航寻路,会自动计算可到达的位置,避开障碍物,可在项目设置中设置静态计算还是动态计算,动态计算是在运行过程中实时计算的,比较耗费性能,一般情况就使用静态。
  • AIController:AI的控制类,可添加AI的一些感知组件、视力感知、听力感知等等。通过感知组件,可以做很多不同的行为,需要在AI中设置编写好的AIController
  • BlackBoardData:黑板,设置一些行为树用到的成员数据
  • BehavirTree:行为树,编写AI行为,需要在AIController中运行写好的行为树(绑定)。树的结构,从根开始往下执行,执行顺序是从上到下,从左到右
    • Composites:合成器节点
      • Selector:选择器合成节点。从左到右执行子项,如果其中一个子项执行成功则终止,如果子项成功,则选择器成功,如果全部失败,则失败
      • Sequence:序列合成节点。从左到右执行子项,其中一个子项执行失败则序列失败,停止执行。序列的全部子节点执行成功,序列成功
      • Simple Parallel:并行执行任务节点
    • Decorator:装饰器,相当于条件判断,通过给合成器添加不同的条件,来确定是否执行该合成器
    • Task:任务,也是行为树的叶子节点,具体的行为逻辑,在执行完一个任务之后,需要给任务标记完成执行

3.简单的AI例子

         使用UE4的TPS示例进行制作,做一个AI在地图中随机移动,看到玩家后朝玩家移动

  1. 创建导航网格体边界体积
    1. 在左侧“放置Actor”面板中,将组件拖拽到场景中,并调整缩放,填满地板区域,按P键可以查看导航网格体的绿色区域
  2. 创建AI蓝图
    1. 将小白人的蓝图类拷贝一份,放到我们自己的文件夹中,并起名AI_BP,并删除蓝图中的所有逻辑,同时删除摄像机组件,将细节面板中将Pawn类别下的自动控制玩家改成“已禁用”
  3. 创建AIController
    1. 新建蓝图类,在“所有类”中搜索AIController,并创建蓝图,名为AIController_BP
    2. 打开蓝图,在左侧添加AI感知组件(AIPerception)
    3. 我们这个例子中只用AI的视力感知,所以需要设置使用哪个感知,选中AIPerception,在细节面板中,AI感知类别下面的感官配置,添加一个元素,选择AI视力配置
    4. 可以配置不同的感官配置,伤害、视力、听力、触摸等等,这里我们只用视力
    5. 点开Sense,可以配置视力感知的一些参数,还需要在归属(阵营)检测上勾选中立方,这个阵营可使用C++进行重写,不同游戏有不同的设置
    6. 打开事件图表,添加感知事件更新的逻辑
  4. 创建黑板
    1. 在资源管理器中右键-人工智能-黑板,创建一个黑板,并命名为AI_BB
    2. 打开黑板,添加一个布尔变量,isFindPlayer
  5. 创建AI行为树
    1. 在资源管理器中右键-人工智能-行为树,创建一个行为树,并命名为AI_BT
    2. 打开行为树,从根节点的黄色区域,按住左键拖拽出来,创建Selector合成器
    3. 从Selector黄色区域,拉出两个Sequencer
    4. 右键Sequencer,创建装饰器,选择Blackboard
    5. 选中黑板装饰器,右侧细节面板-黑板-键查询,分别选择已设置和未设置,黑板键选择我们在黑板中定义的isFindPlayer
  6. 创建任务
    1. 在行为树界面的上方菜单,点击新建任务,选择BTTask_BlueprintBase,创建两个任务,分别为AI_Random_Move_Task和AI_Find_Player_Task
    2. 打开AI_Random_Move_Task,在任务中做一个AI的随机移动
      1. 在左侧-图表-函数处,选择重载“接收执行”
      2. 在增加AI移动逻辑
    3. 打开AI_Find_Player_Task,在任务中做一个朝着玩家移动
      1. 和随机移动逻辑相同,将从导航网格中找点,改成使用当前玩家的位置点
  7. 将任务放到对应Sequencer下
    1. 从Sequencer黄色区域,拖拽连线,从Task中选择我们刚才写好的两个任务
    2. 添加找玩家的任务
    3. 添加随机移动的任务,并添加一个5秒等待时长
  8. 绑定行为树,在AI中绑定AIController
    1. 需要在AIController中运行我们的行为树
    2. 在AI_BP中,将控制改成我们写好的AIController
  9. 运行
    1. 将AI拖拽到场景中,运行就可以看到AI的随机移动,在看到玩家时会跟随玩家移动

4.总结

        制作了一个简单的AI移动,来学习AI制作的基础流程和基础知识,后续逐渐深入的学习AI

猜你喜欢

转载自blog.csdn.net/dl15600383645/article/details/131278243