问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

UE5行为树实战:让AI巡逻与追踪玩家

创作时间:
作者:
@小白创作中心

UE5行为树实战:让AI巡逻与追踪玩家

引用
CSDN
1.
https://blog.csdn.net/m0_37643873/article/details/145594226

在游戏开发中,AI行为树(Behavior Tree)是实现智能NPC行为的关键技术。本文将详细介绍如何在Unreal Engine 5中创建和使用行为树,让AI能够巡逻、追踪和攻击玩家。

目标

  • 理解Unreal Engine 5的行为树(Behavior Tree)
  • 创建行为树(BT)和黑板(Blackboard)管理AI状态
  • 使用任务(Task)让AI巡逻、追踪、攻击玩家

什么是行为树(Behavior Tree)?

在Unreal Engine 5中,行为树(Behavior Tree,简称BT)是用于管理AI逻辑的工具。它让AI可以通过条件判断、任务执行、状态管理,做出更复杂的行为决策。

行为树的核心组件

组件
作用
行为树(Behavior Tree,BT)
AI决策逻辑的主体
黑板(Blackboard,BB)
存储AI的状态(目标、位置等)
任务(Task,BTTask)
执行具体的AI行为
服务(Service,BTService)
持续运行的逻辑(例如定期检查玩家位置)
装饰器(Decorator,BTDecorator)
条件判断,控制AI是否执行某个任务

💡行为树的本质是“决策树”,通过黑板存储数据,并使用任务、服务、装饰器来控制AI逻辑。

创建AI行为树

新建Behavior Tree和Blackboard

  1. 在UE5中,打开“内容浏览器(Content Browser)”
  2. 右键 → 人工智能 → 创建Behavior Tree(行为树),命名为BT_EnemyAI
  3. 右键 → 人工智能 → 创建Blackboard(黑板),命名为BB_EnemyAI
  4. 双击BT_EnemyAI,并将Blackboard Asset设为BB_EnemyAI

这样,我们就创建了AI的行为树,并连接了黑板用于存储状态数据。

设置AI黑板(Blackboard)

黑板(Blackboard)是行为树的数据存储,负责存储AI的目标、状态等信息。

在BB_EnemyAI添加黑板键

  1. 打开BB_EnemyAI
  2. 点击“+”添加新键
  • Key Name:TargetActor
  • Key Type:Object(Actor)
  1. 保存并关闭

这样,黑板可以存储AI目标对象(玩家)!

在C++代码中绑定AI控制器和行为树

EnemyAIController绑定行为树

📌修改EnemyAIController.h

#pragma once
#include "CoreMinimal.h"
#include "AIController.h"
#include "BehaviorTree/BehaviorTree.h"
#include "BehaviorTree/BlackboardComponent.h"
#include "EnemyAIController.generated.h"

UCLASS()
class MYGAME_API AEnemyAIController : public AAIController
{
    GENERATED_BODY()

public:
    virtual void BeginPlay() override;

private:
    UPROPERTY(EditDefaultsOnly)
    UBehaviorTree* EnemyBehaviorTree;
};

📌修改EnemyAIController.cpp

#include "EnemyAIController.h"
#include "BehaviorTree/BehaviorTree.h"
#include "Kismet/GameplayStatics.h"

void AEnemyAIController::BeginPlay()
{
    Super::BeginPlay();

    // 动态加载 Behavior Tree
    UBehaviorTree* LoadedBehaviorTree = LoadObject<UBehaviorTree>(nullptr, TEXT("/Game/BT_EnemyAI.BT_EnemyAI"));

    if (LoadedBehaviorTree)
    {
        EnemyBehaviorTree = LoadedBehaviorTree;
        RunBehaviorTree(EnemyBehaviorTree); //运行行为树
    }
}

这样,AI角色会在游戏开始时自动运行行为树!

让AI巡逻

在BT_EnemyAI添加巡逻任务

  1. 打开BT_EnemyAI
  2. 右键 → 添加Selector
  3. 在Selector下右键 → 添加Sequence
  4. 在Sequence下右键 → 添加Patrol
  5. 再右键添加Wait

这样,AI角色会不断在随机点之间巡逻!

让AI追踪玩家

在BT_EnemyAI添加追踪任务

  1. 在Selector下右键 → 添加Sequence
  2. 在Sequence下右键 → 添加MoveTo
  3. 点击MoveTo节点,再细节面板修改如下属性
  4. 右键Sequence添加装饰器→BlackBoard
  5. 点击添加的装饰器,在细节面板修改如下属性。
  6. 修改另一个Sequence,最总效果如下
    📌修改EnemyCharacter.cpp
void AEnemyCharacter::OnSeePlayer(APawn* Pawn)
{
![](https://wy-static.wenxiaobai.com/chat-rag-image/11275350146483415978)
    AEnemyAIController* AIController = Cast<AEnemyAIController>(GetController());
    if (AIController)
    {
        UBlackboardComponent* BlackboardComp = AIController->GetBlackboardComponent();
        if (BlackboardComp)
        {
            //设置黑板键的值
            BlackboardComp->SetValueAsObject(TEXT("TargetActor"), Pawn);
        }
    }
}

现在,AI看到玩家后会自动追逐!

总结

  • 创建行为树(BT)管理AI逻辑
  • 使用黑板(BB)存储AI状态
  • 编写行为树让AI巡逻 & 追踪
  • 绑定AI控制器,让AI在UE5中执行行为树
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号