Bootstrap

第 12 天:行为树(Behavior Tree),让 AI 更智能!

🎯 目标:

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

1️⃣ 什么是行为树(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 逻辑。

2️⃣ 创建 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 的行为树,并连接了黑板用于存储状态数据。

3️⃣ 设置 AI 黑板(Blackboard)

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

🔹 在 BB_EnemyAI 添加黑板键

  1. 打开 BB_EnemyAI
  2. 点击 “+” 添加新键
    • Key Name:TargetActor
    • Key Type:Object(Actor)
  3. 保存并关闭
    在这里插入图片描述

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

4️⃣ 在 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 角色会在游戏开始时自动运行行为树!

5️⃣ 让 AI 巡逻

🔹 在 BT_EnemyAI 添加巡逻任务

  1. 打开 BT_EnemyAI
  2. 右键 → 添加 Selector
  3. 在 Selector 下右键 → 添加 Sequence
  4. **在 Sequence下右键 → 添加Patrol **
  5. 再右键添加Wait
    在这里插入图片描述

这样,AI 角色会不断在随机点之间巡逻!
在这里插入图片描述

6️⃣ 让 AI 追踪玩家

🔹 在 BT_EnemyAI 添加追踪任务

  1. 在 Selector 下右键 → 添加 Sequence
  2. **在 Sequence下右键 → 添加MoveTo **
  3. 点击MoveTo节点,再细节面板修改如下属性
    在这里插入图片描述
  4. 右键Sequence添加装饰器→BlackBoard
  5. 点击添加的装饰器,在细节面板修改如下属性。
    在这里插入图片描述
  6. 修改另一个Sequence,最总效果如下
    在这里插入图片描述
    📌 修改 EnemyCharacter.cpp
void AEnemyCharacter::OnSeePlayer(APawn* Pawn)
{
    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 中执行行为树

🎮 明天我们将学习 AI 战斗系统,让敌人攻击玩家! 🚀

;