UE4的AI行为树基础知识

news2024/12/24 19:42:40

1.前言

        在制作游戏时,会制作敌人、怪物、NPC等不被玩家所操作的对象,那么制作这些对象,就需要通过使用AI行为树来为他们编写各自的一些行为逻辑,比如敌人会寻找主角并攻击、怪物会在自己的领域巡逻等等。

2.组件说明

  • NavMeshBoundsVolume:导航网格体边界体积,用作导航寻路,会自动计算可到达的位置,避开障碍物,可在项目设置中设置静态计算还是动态计算,动态计算是在运行过程中实时计算的,比较耗费性能,一般情况就使用静态。
  • AIController:AI的控制类,可添加AI的一些感知组件、视力感知、听力感知等等。通过感知组件,可以做很多不同的行为,需要在AI中设置编写好的AIController
  • BlackBoardData:黑板,设置一些行为树用到的成员数据
  • BehavirTree:行为树,编写AI行为,需要在AIController中运行写好的行为树(绑定)。树的结构,从根开始往下执行,执行顺序是从上到下,从左到右
    • Composites:合成器节点
      • Selector:选择器合成节点。从左到右执行子项,如果其中一个子项执行成功则终止,如果子项成功,则选择器成功,如果全部失败,则失败
      • Sequence:序列合成节点。从左到右执行子项,其中一个子项执行失败则序列失败,停止执行。序列的全部子节点执行成功,序列成功
      • Simple Parallel:并行执行任务节点
    • Decorator:装饰器,相当于条件判断,通过给合成器添加不同的条件,来确定是否执行该合成器
    • Task:任务,也是行为树的叶子节点,具体的行为逻辑,在执行完一个任务之后,需要给任务标记完成执行

3.简单的AI例子

         使用UE4的TPS示例进行制作,做一个AI在地图中随机移动,看到玩家后朝玩家移动

  1. 创建导航网格体边界体积

     

    1. 在左侧“放置Actor”面板中,将组件拖拽到场景中,并调整缩放,填满地板区域,按P键可以查看导航网格体的绿色区域
  2. 创建AI蓝图
    1. 将小白人的蓝图类拷贝一份,放到我们自己的文件夹中,并起名AI_BP,并删除蓝图中的所有逻辑,同时删除摄像机组件,将细节面板中将Pawn类别下的自动控制玩家改成“已禁用”
  3. 创建AIController
    1. 新建蓝图类,在“所有类”中搜索AIController,并创建蓝图,名为AIController_BP
    2. 打开蓝图,在左侧添加AI感知组件(AIPerception)
    3. 我们这个例子中只用AI的视力感知,所以需要设置使用哪个感知,选中AIPerception,在细节面板中,AI感知类别下面的感官配置,添加一个元素,选择AI视力配置
    4. 可以配置不同的感官配置,伤害、视力、听力、触摸等等,这里我们只用视力
    5. 点开Sense,可以配置视力感知的一些参数,还需要在归属(阵营)检测上勾选中立方,这个阵营可使用C++进行重写,不同游戏有不同的设置
    6. 打开事件图表,添加感知事件更新的逻辑
  4. 创建黑板
    1. 在资源管理器中右键-人工智能-黑板,创建一个黑板,并命名为AI_BB
    2. 打开黑板,添加一个布尔变量,isFindPlayer
  5. 创建AI行为树
    1. 在资源管理器中右键-人工智能-行为树,创建一个行为树,并命名为AI_BT
    2. 打开行为树,从根节点的黄色区域,按住左键拖拽出来,创建Selector合成器
    3. 从Selector黄色区域,拉出两个Sequencer
    4. 右键Sequencer,创建装饰器,选择Blackboard
    5. 选中黑板装饰器,右侧细节面板-黑板-键查询,分别选择已设置和未设置,黑板键选择我们在黑板中定义的isFindPlayer
  6. 创建任务
    1. 在行为树界面的上方菜单,点击新建任务,选择BTTask_BlueprintBase,创建两个任务,分别为AI_Random_Move_Task和AI_Find_Player_Task
    2. 打开AI_Random_Move_Task,在任务中做一个AI的随机移动
      1. 在左侧-图表-函数处,选择重载“接收执行”
      2. 在增加AI移动逻辑
    3. 打开AI_Find_Player_Task,在任务中做一个朝着玩家移动
      1. 和随机移动逻辑相同,将从导航网格中找点,改成使用当前玩家的位置点
  7. 将任务放到对应Sequencer下
    1. 从Sequencer黄色区域,拖拽连线,从Task中选择我们刚才写好的两个任务
    2. 添加找玩家的任务
    3. 添加随机移动的任务,并添加一个5秒等待时长
  8. 绑定行为树,在AI中绑定AIController
    1. 需要在AIController中运行我们的行为树
    2. 在AI_BP中,将控制改成我们写好的AIController
  9. 运行
    1. 将AI拖拽到场景中,运行就可以看到AI的随机移动,在看到玩家时会跟随玩家移动

4.总结

        制作了一个简单的AI移动,来学习AI制作的基础流程和基础知识,后续逐渐深入的学习AI

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

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

相关文章

国产麒麟服务器等保二级 配置规范(二)

一、redis的配置规范 1.1 禁止以root账号运行redis服务 以下Linux 命令操作创建了一个无 home 目录权限,且无法登录的普通账号redis。 #useradd -M -s /sbin/nologin redis 修改服务允许和配置文件权限: #setsid sudo -u redis /usr/bin/redis-serer /e…

Python 智能语音机器人(改进版)

本篇为改进版,之前部分代码存在错误,部分网站api也已经失效,现在更换api,并对部分代码进行重写。 本次在Pycharm上测试 相关模块如下: baidu-aip4.16.11 beautifulsoup44.12.2 chardet5.1.0 lxml4.9.2 PyAudio0.2.13…

Redis原理 - RedisObject对象机制

原文首更地址,阅读效果更佳! Redis原理 - RedisObject对象机制 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-object.html 为什么会设计RedisObject 在 Redis 中,我们的操作都是使用指令进行,而这些的命…

chatgpt赋能python:Python截取文件名教程

Python截取文件名教程 在Python编程中,经常需要从文件路径中截取出文件名。这可以让我们更容易地操作文件或数据集,并且使代码更加简洁易懂。在本教程中,我们将介绍如何使用Python截取文件名。 使用os模块 Python的os模块提供了许多与文件…

【C数据结构】静态顺序表_SeqList

目录 【1】数据结构概述 【1.1】什么是数据结构? 【1.2】数据结构分类 【1.3】数据结构术语 【2】数据结构特点 【3】静态顺序表 【3.1】静态顺序表概念及结构 【3.2】静态顺序表定义数据结构和接口 【3.3】静态顺序表初始化 【3.4】静态顺序表头插入 【…

C/C++内存管理(newdelete详解)

C/C内存管理 引言new与delete的使用内置类型自定义类型 new与delete的实现原理内置类型了解operator new与operator delete函数自定义类型 定位newnew&delete与malloc&free的区别总结 引言 在之前的C语言部分,我们已经介绍过内存中的存储区域的划分&#x…

FMQL在linux下GPIO的映射关系与使用

最近几年国产化芯片的使用如火如荼,部分国产手册说明杂且描述不清,尤其是一些映射关系使用文字描述非常不直观。博主在使用GPIO功能输出的时候反复看了几遍再去尝试控制耗费了不少时间。现结合相关文档总结GPIO映射表格,方便读者使用。 1、 …

【Spring Boot 】Spring Boot 统一功能处理

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 前言 1. Spring 拦截器 1.1 自定义拦截器 1…

6月19日第壹简报,星期一,农历五月初二

6月19日第壹简报,星期一,农历五月初二坚持阅读,静待花开1. 未来10天江南华南等地多降雨过程,国家防总将防汛四级响应范围扩至八省份,加派工作组赴地方协助指导。2. “一天有四季、十里不同天”,“最美”独库…

LVS - DR集群

LVS - DR集群 数据包流向分析: (1)客户端发送请求到 Director Server(负载均衡器),请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP)到达内核空间。 (2)Direct…

【VS2022】win 10 / win 11:Visual Studio 2022 社区版免费下载与安装

目录 一、Visual Studio 2022 下载 二、Visual Studio 2022 安装 三、Visual Studio 2022 快捷方式创建 四、Visual Studio 2022 使用 一、Visual Studio 2022 下载 Visual Studio 2022 官方下载https://visualstudio.microsoft.com/zh-hans/downloads/首先登陆 Visual Stu…

attention unet + cldice 论文总结

Blood Vessel Segmentation from Low-Contrast and Wide-Field Optical Microscopic Images of Cranial Window by Attention-Gate-Based Network论文总结 论文:Blood Vessel Segmentation by Attention-Gate-Based Network 目录 一、论文背景和出发点 二、创新点…

vue源码阅读之Observer

我们上次学习了vue数据驱动的概念,以及简单的vue怎么知道数据更新,然后采取行动的。今天我们就来继续深入学习,vue怎么把数据和视图给绑定在一起的,数据发生变化,视图怎么会自动发生变化的。 vue中的Observer 之前讲…

chatgpt赋能python:Python截取某一段文字

Python截取某一段文字 Python是最流行的编程语言之一,用于开发各种类型的应用程序,包括Web应用程序、桌面应用程序、游戏等。在本文中,我们将讨论如何使用Python截取某一段文字。这对于Web开发者和SEO专家非常有用,因为他们需要查…

【干货】Android系统定制基础篇:第八部分(增加以太网设置菜单、支持多摄像头、替换默认签名)

一、增加以太网设置菜单 Android 系统设置默认并没有以太网相关设置项,但以太网功能是支持的,因此我们仅仅需要增加设置界面即可。以太网设置界面如下: 修改 diff --git a/packages/apps/Settings/AndroidManifest.xml b/packages/apps/Se…

【第六次】21级计科计算机组成原理课外练习

【第六次】21级计科计算机组成原理课外练习 一、单选题二、多选题三、填空题 一、单选题 2-1 假定某计算机按字节编址,采用小端方式,有一个float型变量x的地址为0xffffc000,x12345678H,则在内存单元0xffffc001中存放的内容是 A.…

计算机网络和Linux网络

计算机网络和Linux网络 计算机网络概论 什么是计算机网络 计算机网络(结构上) 由节点(主机、网络交换设备设备)、边(通信设备)、协议构成协议:对等层的实体在通讯过程中应该遵守的规则的集合&…

软考A计划-网络工程师-易混淆知识汇总

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

chatgpt赋能python:Python编程:如何隐藏输入以保护信息安全?

Python编程:如何隐藏输入以保护信息安全? 随着数字化时代的到来,人们越来越多地依赖于互联网和技术设备进行通信和交易。然而,信息安全成为越来越大的问题:黑客和其他恶意分子通过各种手段获取和利用个人信息。为保障…

【瑞萨RA_FSP】GPT—— PWM功能详解

文章目录 一、GPT比较匹配功能详解1. 锯齿波PWM模式(普通PWM模式)2. 三角波PWM模式1(波谷32位传输)3. 三角波PWM模式2(波峰和波谷32位传输)4. 三角波PWM模式3(波谷64位传输)5. 设置死…