斯坦福UE4 + C++课程学习记录 24:AI行为树-入门寻路

目录

1. 创建敌对小兵

2. 寻路行为树


        在课程的开头,作者先大致讲解了一部分关于行为树的基本概念。由于本人在研究强化学习的过程中也接触学习过行为树,固不再对相关概念进行赘述,不熟悉行为树的朋友可以自行搜索一些科普文,结合示例对行为树的运作流程进行初步了解。

        在进入课程前,可参考作者的设置,在UE的“编辑器偏好设置”中将“自动编译新添C++类”关闭。如是做,在我们添加新类时会弹出如下界面,防止UE每次自动热重载。

图24-1 关闭自动编译

1. 创建敌对小兵

        在实现敌人AI前,首先创建一个敌对小兵的角色。详细的创建操作同最开始第3节创建人物,也可直接参考课程P40开头。简要流程为创建SurAICharacter和SurAIController两个类(前者实现角色,后者实现行为树),然后在UE中创建蓝图类,并为SurAICharacter的蓝图类设置Minion_Lane_Ranged_Dawn网格体和MinionRanged_AnimBP动画,最后将其拖入世界场景中。

        其中有两个点需要注意一下:一是便于项目管理,可以将这两个类添加到新建的AI文件夹下,并注意代码中include的路径;二是由于Epic商店下载的小兵模型没有包含动画蓝图,因此可以点击此处,从作者的git上下载文件,并可参考原路径将其放本地路径的 内容/ParagonMinions/Characters/Minions/Down_Minions/Meshes 目录下。这个蓝图已经修改好了,不需要进行如课程中的debug操作。

        随后,从“放置Actor”中向世界添加导航网格体边界体积(NavMeshBoundsVolume),并放大到跟地板差不多的大小。在本节中,它的作用是计算碰撞体积,阻止特定Actor进入体积,即计算哪些地方是Actor能走的、哪些地方是Actor不能走的。如果如图24-2开启导航的显示,那世界中可通行的区域就会显示为绿色,如图24-3所示。

图24-2 开启导航显示
图24-3 绿色显示可达

2. 寻路行为树

        在UE中分别创建“人工智能”下的“黑板”和“行为树”,“黑板”可以理解为AI的记忆。在黑板中创建向量类型的MoveToLocation键,用于记录小兵移动的目的地。在行为树中添加简单逻辑如图24-4,实现了小兵朝MoveToLocation记录的位置移动,在到达后等待5秒:

图24-4 寻路行为树

         完成后,在SurAIController的相关代码中创建并行为树对象并暴露给UE,重写BeginPlay,实现运行行为树,并把玩家位置赋值给MoveToLocation。核心代码如下,核心代码同样可在我的github页面中找到:

RunBehaviorTree(BehaviorTree);

APawn* MyPawn = UGameplayStatics::GetPlayerPawn(this, 0);
if (MyPawn) {
    GetBlackboardComponent()->SetValueAsVector("MoveToLocation", MyPawn->GetActorLocation());
	}

        最后,回到UE中创建AIController的蓝图类,命名为MinionControllerBP,打开后给刚刚暴露的BehaviorTree设置为之前创建的寻路行为树;同时,在小兵蓝图类中,将小兵自身中“Pawn”下的“AI控制器类”设置为MinionControllerBP。

扫描二维码关注公众号,回复: 15193415 查看本文章
图24-5 设置小兵控制器

        完成后编译运行,小兵就会自动朝玩家的出身点移动,如图24-6所示。此外,如果直线内有障碍物阻挡,小兵同样可以绕过障碍到达目的地:

图24-6 自动寻路

猜你喜欢

转载自blog.csdn.net/surkea/article/details/128052893