从零开始使用UEC++创建一个简易的AI

从零开始使用UEC++创建一个简易的AI—第一部分

这篇文章的内容为创建一个简易的AI。使用的引擎为UE4,C++加行为树结合
通过这篇文章能够简单熟悉使用UC++创建AI的一般流程。

一.创建项目

1.选择第三人称(选择这个会有一个简易的玩家模版,我们主要讨论AI)

2.点击下一步

在这里插入图片描述

3.选择C++

4.其他无所谓(但是建议按照我的步骤来)

5.点击下一步

在这里插入图片描述

项目创建好的样子:

运行可以直接操作玩家,但是只是具备简单的跑动跳跃功能。

在这里插入图片描述

二、开始创建所需的类

由于目前功能比较简单,我们只需要创建两个类

1.Character类,取名为MyAICharacter

2.AIController类,取名为MyAIController

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这里选择public文件可以方便管理。

在这里插入图片描述

创建好一个类就会生成一个cpp文件和一个头文件。

.h文件也就是头文件,一般做声明用

cpp文件才是我们编写功能代码的地方

三、创建好对应的行为树和黑板等。

1.行为树

2.黑板

右键文件夹

Behaviortree和blackboard两个

在这里插入图片描述

创建完成:

在这里插入图片描述

1.打开我们创建好的行为树,点击黑板,选择我们创建好的黑板

在这里插入图片描述

2.打开黑板,黑板一般有一个默认的键值,selfActor,如果没有就自己创建,我们给他换个名字为TargetActor

在这里插入图片描述

四:继承之前创建的类创建蓝图

Character和Controller都要创建

在这里插入图片描述

在这里插入图片描述

创建好的样子

在这里插入图片描述

五、给AI绑定好行为树和Controller

1.打开角色蓝图,倒入mesh

在这里插入图片描述

2.绑定控制器

选择我们创建好的蓝图(注意不要直接选择C++类,C++类我们没有对行为树初始化)

在这里插入图片描述

2.编写Controller类代码

2.1头文件

在这里插入图片描述

#pragma once

#include "CoreMinimal.h"
#include "AIController.h"
#include "MyAIController.generated.h"

/**
 * 
 */
class UBehaviorTree;
UCLASS()
class TEST_API AMyAIController : public AAIController
{
	GENERATED_BODY()

protected:
	virtual void BeginPlay() override;//重载父类方法

public:
	UPROPERTY(EditDefaultsOnly,Category="AI")//这里不知道的话可以先去了解下UE的宏反射
	UBehaviorTree* MyBehaviorTree;
};

2.2cpp文件

在这里插入图片描述

#include "MyAIController.h"
#include "AIController.h"

void AMyAIController::BeginPlay()
{
	Super::BeginPlay();//加载父类
	if (MyBehaviorTree)//防止空指针
	{
		RunBehaviorTree(MyBehaviorTree);//直接运行
	}
}

3.编译

1.将编辑器关闭,ctrl+f5编译,他会自动打开

2.编译完成之后,打开controller蓝图可以看到我们在代码中生成的行为树选项

在这里插入图片描述
选择对应的行为树。

六、编写行为树

1.拉出箭头选择sequence节点

在这里插入图片描述

2.同样在sequence节点下拉出moveto和wait两个节点,但是要修改moveto节点的目标值为targetactor

在这里插入图片描述

七、最后一步,编写功能代码,让ai可以识别玩家并且跟随。

在这里插入图片描述

#include "MyAIController.h"
#include "AIController.h"
#include "BehaviorTree/BlackboardComponent.h"
#include "Kismet/GameplayStatics.h"
#include "GameFramework/Character.h"
void AMyAIController::BeginPlay()
{
	Super::BeginPlay();//加载父类
	if (ensure(MyBehaviorTree))//防止空指针
	{
		RunBehaviorTree(MyBehaviorTree);//直接运行
	}
	UBlackboardComponent* temBB = GetBlackboardComponent();
	ACharacter *player = UGameplayStatics::GetPlayerCharacter(GetWorld(),0);//拿到玩家实例
	if (ensure(temBB))
	{
		temBB->SetValueAsObject("TargetActor", player);
	}
	
}

到这里,我们的AI就能够识别玩家了,但是,这时候运行是不可能跟随我们的,为什么呢?因为我们还没有添加NavMeshBoundsVolume组件给地面

拖到场景中,是一个正方体,调节他的大小。

在这里插入图片描述

如何查看地面有没有烘焙好呢?点击左上角的show,打开navigation,绿色的就是ai能到达的地方

在这里插入图片描述

在这里插入图片描述

运行,发现AI能够随时跟随我们。

我们可以查看行为树的运行情况:

在这里插入图片描述

至此,一个简易的AI就完成了。

下一篇记录让AI增加巡逻,和视野功能。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
欢迎体验AI1.0 1 ------------ 运行本软件需要JRE(java运行时)1.5.0_08以上版本。 运行方法:在program目录下,右键点击AI10.jar,选打开方式为“java platform standard edition binary”即可。 2 ------------ 界面介绍: 界面左侧是一个树(load数据后显示树结构),右侧上方是您在树上点选的节点的信息的显示与编辑区,右侧中间是命令的输入区,右侧下方是输出区。 您会发现界面上有很多按钮,其实他们都是我调试程序用的,您只需了解几个按钮即可。 File菜单的“Set default dir”是设置选择载入、导出文件的默认目录, “save as”是将树保存为文件,“load”则是将文件中保存的树装入到程序中来(会覆盖原有树的呦~~,记得先save)。 Script菜单的“save script as”是将命令区的内容存入文件,“load script”是将文件读入命令区(覆盖原有的命令)。 右侧中部的“Execute”按钮可以执行命令区的命令,可以用鼠标选择一部分命令为高亮,而只执行选择的命令。 ***注意***需要人工将右下的输出区的滚动条滚到最下!(作者在此道歉了,但作者毕竟是技艺不精啊……) 右侧中部的“CLO”是清除输出区的按钮,“—”则是在输出区加横线的按钮。 3 ------------ 功能介绍: ***注意***使用前需LOAD目录import_me下的template.dat。(或LOAD您以前保存的树,但要确认模板的存在。) 之后就可以运行各种命令了。 但是命令是有限的。 ***注意***从那张源代码截图可看出本软件支持的命令…… 还有就是import_me目录下的developing.txt是我开发时积累的命令脚本,大家可以导入玩一玩。 4 ------------ 欢迎批评与建议。 作者:cmpltrtok 电邮:cmpltrtok@sina.com 5 ------------ 命令列表: 作者还是不放心,把命令列表写一下: 删除分……。 删除……属于……。 ……是一种……不是一种……。 ……是一种……。 ……是一个……不是一个……。 ……是一个……。 ……是一种……(吗)? ……是一个……(吗)? ……是什么? ……是……吗?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值