当前位置:   article > 正文

从零开始使用UEC++创建一个简易的AI_uec++制作ai

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;
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2.2cpp文件

在这里插入图片描述

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

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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);
	}
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

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

在这里插入图片描述

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/336350?site
推荐阅读
相关标签
  

闽ICP备14008679号