RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
斯坦福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。

图24-5 设置小兵控制器

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

图24-6 自动寻路

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


标题名称:斯坦福UE4+C++课程学习记录24:AI行为树-入门寻路-创新互联
网站链接:http://lswzjz.com/article/dioojp.html