第 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 TreeUBehaviorTree* 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 战斗系统,让敌人攻击玩家! 🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/69778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI眼力训练营:图像标注让机器变聪明

前言 在人工智能的世界里,图像标注就像给机器装上眼睛,让它不再是“瞎子”,而是能清楚看懂图像中的每个物体。想象一下,当我们人类刚开始学习时,常常要借助老师的帮助,指着一只狗说:“这就是狗。”AI也是一样,需要通过大量的“标注”来学会识别图像中的每个物体,就像…

Android 10.0 framework中增加开启和关闭飞行模式的接口

1.前言 在10.0的系统rom定制开发中,在某些产品定制化开发中,需要能通过接口来控制和开启飞行模式的相关 功能,所以就需要从系统settings和下拉状态栏中来看下相关的源码来实现相关功能 2.framework中增加开启和关闭飞行模式的接口的核心类 packages/services/Car/tests/C…

fun-transformer学习笔记-Task1——Transformer、Seq2Seq、Encoder-Decoder、Attention之间的关系

Transformer、Seq2Seq、Encoder-Decoder、Attention由这四者之间的关系可以从模型架构的发展脉络来理解&#xff1a; Seq2Seq 与 Encoder–Decoder 模型 “Seq2Seq”&#xff08;sequence‐to‐sequence&#xff09;是一类用于将一个变长序列映射为另一个变长序列的任务&#x…

WRF-Hydro:高级水文建模系统详解

1. WRF-Hydro 概述 什么是 WRF-Hydro&#xff1f; WRF-Hydro&#xff08;Weather Research and Forecasting Hydrological modeling system&#xff09;是由美国国家大气研究中心&#xff08;NCAR&#xff09;开发的一个用于耦合气象模型和水文模型的高级建模系统。它旨在提供…

公然上线传销项目,Web3 的底线已经被无限突破

作者&#xff1a;Techub 热点速递 撰文&#xff1a;Yangz&#xff0c;Techub News 今天早些时候&#xff0c;OKX 将上线 PI 的消息在圈内引起轩然大波&#xff0c;对于上线被板上钉钉为传销盘子的「项目」 &#xff0c;Techub News 联系了 OKX 公关&#xff0c;但对方拒绝置评…

python的selenium库模拟输入和点击

使用python打开已经登录的谷歌浏览器&#xff0c;模拟录入文本提交数据。1、执行命令行&#xff0c;系统会打开浏览器&#xff0c;手工登录"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port9223 --user-data-dir"C:\tmp"…

Zabbix告警队列清理教程

文章来源&#xff1a;乐维社区 场景&#xff1a;由于网络故障导致&#xff0c;导致zabbix几百上千台机子告警&#xff0c;邮件失败多次尝试发送&#xff0c;导致堆积了很多告警队列&#xff0c;其他邮件产生了时延。一下是两种解决方法。 方法一&#xff1a; 1、查看alerts目…

vue知识点2

1.methods和mounted的区别 methods是定义方法&#xff0c;不涉及到调用 mounted涉及到操作 所以methods后面是&#xff1a;&#xff0c;mounted后面是&#xff08;&#xff09; 2.介绍一下emit的用法 如果子控件要调用父页面的方法&#xff0c;在父页面的子控件引用处&…

Unity中快速制作2D动画:技巧编

用Unity制作2D动画,除了基础操作外,还有一些更高效的技巧和工具组合,可以大幅提升开发效率,以下是本人经验总结: 1. 分秒必争的Sprite Sheet处理 自动切割Sprite Sheet: 在导入Sprite Sheet时,在Sprite Editor中选择 Slice > Automatic,Unity会自动根据透明区域切割…

windows使用cmake编译工程教学:libcurl库源码编译--qt6使用ftp服务--vcpkg下载的包cmake如何使用

windows使用cmake编译工程教学:libcurl库源码编译–qt6使用ftp服务–vcpkg下载的包cmake如何使用 前言 qt6中取消了对ftp协议的支持,所以如果要想在qt中使用tfp服务,需要接入第三方库,也就是libcurl,libcurl需要在本地进行编译,趁这个机会学习一下cmake的使用,记录一下…

网易易盾接入DeepSeek,数字内容安全“智”理能力全面升级

今年农历新年期间&#xff0c;全球AI领域再度掀起了一波革命性浪潮&#xff0c;国产通用大模型DeepSeek凭借其强大的多场景理解与内容生成能力迅速“出圈”&#xff0c;彻底改写全球人工智能产业的格局。 作为国内领先的数字内容风控服务商&#xff0c;网易易盾一直致力于探索…

护照识别设备-护照信息识别系统-PHP护照信息识别接口

护照是公民出入本国国境和到国外旅行时&#xff0c;由本国发给的一种证明该公民国际和身份的合法证件。护照作为重要的个人身份证明证件之一&#xff0c;对于出入境、酒店、旅游业等需要对护照进行信息提取与真伪查验的场景来说至关重要。 人工智能时代&#xff0c;基于文字识…

使用 React 16+Webpack 和 pdfjs-dist 或 react-pdf 实现 PDF 文件显示、定位和高亮

写在前面 在本文中&#xff0c;我们将探讨如何使用 React 16Webpack 和 pdfjs-dist 或 react-pdf 库来实现 PDF 文件的显示、定位和高亮功能。这些库提供了强大的工具和 API&#xff0c;使得在 Web 应用中处理 PDF 文件变得更加容易。 项目设置 首先&#xff0c;我们需要创建…

42页精品PPT | 数字政府智慧政务大数据平台建设方案

这份《数字政府智慧政务大数据平台建设方案》PPT详细阐述了数字政府智慧政务大数据平台的建设背景、目标、架构以及实施策略。方案围绕解决当前政务服务中的痛点&#xff0c;如“互联网政务服务”推进中的数据共享难题、数据安全风险以及部门间业务流程整合等问题展开。 通过构…

使用 Go 语言调用 SiliconFlow 语音生成 API 的脚本,用于将文本转换为 MP3 格式的语音文件。

使用 Go 语言调用 SiliconFlow 语音生成 API 的脚本&#xff0c;用于将文本转换为 MP3 格式的语音文件。 代码结构 包和依赖 package mainimport ("fmt""io""os""path/filepath""github.com/sashabaranov/go-openai" )使…

CSS 小技巧 —— CSS 实现 Tooltip 功能-鼠标 hover 之后出现弹层

CSS 小技巧 —— CSS 实现 Tooltip 功能-鼠标 hover 之后出现弹层 1. 两个元素实现 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>纯 CSS 实现 Tooltip 功能-鼠标 hover 之后出现弹层</titl…

网络工程师 (34)生成树协议

前言 生成树协议&#xff08;Spanning Tree Protocol&#xff0c;STP&#xff09;是一种工作在OSI网络模型中第二层&#xff08;数据链路层&#xff09;的通信协议&#xff0c;其基本应用是防止交换机冗余链路产生的环路&#xff0c;确保以太网中无环路的逻辑拓扑结构&#xff…

基于CanMV IDE 开发软件对K210图像识别模块的开发

简介 CanMV IDE 是一款专为 K210 芯片设计的图形识别 Python 软件&#xff0c;它提供了强大的功能&#xff0c;帮助开发者轻松实现基于 K210 芯片的图形识别应用。无论你是初学者还是经验丰富的开发者&#xff0c;CanMV IDE 都能为你提供便捷的开发环境和丰富的资源。 硬件资…

linux的三剑客和进程处理

Linux三剑客&#xff1a; grep&#xff1a;查找 sed&#xff1a;编辑 awk&#xff1a;分析 grep - 正则表达式 [rootlocalhost ~]# grep ^a hello.txt abc grep - 忽略大小写&#xff0c;还有一些场景需要查询出来对应字符串所在的行号&#xff0c;方便我们快速在文件中定位字…

Python虚拟环境管理工具 pyenv

情景 我现在在部署一个python 项目&#xff0c;需要用到Python 3.10。但是我本地已经有了一个3.12解释器&#xff0c;有没有一种方法&#xff0c;可以管理python 环境&#xff0c;还可以随意切换。怎么做&#xff1f; window 安装pyenv-win 使用 PowerShell&#xff08;以管…