AI_寻路系统_修改寻路网格体

news2024/11/20 2:41:18

学习笔记,仅供参考!

一、完成创建关卡和AI代理的初步步骤,以演示可以修改导航系统的不同方法。

创建简单关卡,并通过在关卡中放入导航网格体边界体积Actor来添加导航。

将ThirdPersonCharacter蓝图修改为使用导航系统在关卡中四处游走。  

1 、创建第三人称项目模板,新建关卡,选择 默认(Default) 关卡。

2、在 世界大纲视图(World Outliner) 中,选择 Floor 静态网格体Actor,并从 细节(Details) 面板,将 缩放(Scale) 设置为X = 10、Y = 10、Z = 1。

3、在 内容浏览器(Content Browser) 中,转到 几何结构(Geometry) > 网格体(Meshes),并将 TemplateFloor 静态网格体拖到关卡中。

4、转到 放置Actor(Place Actors) 面板,搜索 导航网格体边界体积(Nav Mesh Bounds Volume)。将其拖到关卡中,并放在地板网格体上方。

5、选择 导航网格体边界体积(Nav Mesh Bounds Volume) 后,转到 细节(Details) 面板,将 缩放(Scale) 设置为X = 20、Y= 20、Z = 5,以覆盖整个地板区域。默认情况下,虚幻引擎将自动在导航边界内生成导航。Navmesh Actor RecastNavMesh-Default 应该也已添加到关卡中。按 P 键以在关卡中可视化导航网格体。

如果未生成导航,请转到"项目设置(Project Settings) > 导航系统(Navigation System)",并启用"自动创建导航数据(Auto Create Navigation Data)"复选框。

6、转到 放置Actor(Place Actors) 面板,在 基本(Basic) 类别下,将 立方体(Cube) 静态网格体 Actor拖到关卡中。end放的精准。

选择 立方体(Cube) 之后,转到 细节(Details) 面板,将 缩放(Scale) 设置为X=1、Y=1、Z=5。

7、将另外三个 立方体 拖到关卡中,并按上述立方体的参数进行缩放。将其放在地板四周,创建四个支柱,如下所示。

8、接下来,在中间添加一段楼梯和一个平台。在 内容浏览器(Content Browser) 中,转到 第三人称(ThirdPerson) > 网格体(Meshes),并将 Linear_Stair_StaticMesh 拖到关卡中。

选择楼梯之后,转到 细节(Details) 面板,将 缩放(Scale) 设置为X=1. 5、Y=1、Z=1. 3。

选择楼梯之后,按住 Alt 键的同时拖动网格体以进行复制。

转到 放置Actor(Place Actors) 面板,在 基本(Basic) 类别下,将 立方体(Cube) 静态网格体 Actor拖到关卡中。转到 细节(Details) 面板,将 缩放(Scale) 设置为X = 14、Y= 4、Z = 0.1。将Actor放在楼梯边缘以创建平台,如下所示。

转到 放置Actor(Place Actors) 面板,在 基本(Basic) 类别下,将 球体(Sphere) 静态网格体 Actor拖到关卡中。

选择 球体 之后,转到 细节(Details) 面板,并从 碰撞(Collision) 分段,将 碰撞预设(Collision Presets) 设置为 无碰撞(No Collision)

最后,复制球体,并将其放在关卡中的四周,创建了一个简单的关卡,并添加了一个导航网格体边界体积。你还添加了五个球体,用于充当代理的目标Actor。

二、你将创建一个将在一系列目标Actor之间移动的AI代理

1、在 内容浏览器(Content Browser) 中,右键点击并选择 新建文件夹(New Folder),以新建文件夹。将文件夹命名为 NavigationSystem。

2、在 内容浏览器中,转到 ThirdPersonBP > 蓝图(Blueprints),然后选择 ThirdPersonCharacter 蓝图。将其拖到 NavigationSystem 文件夹中,并选择选项 复制到此处(Copy Here)

3、转到 NavigationSystem 文件夹并将蓝图重命名为 BP_NPC_ModNavMesh。双击蓝图在蓝图编辑器中将其打开,并转到 事件图表(Event Graph)。选择所有输入节点并将其删除。

4、右键点击 事件图表(Event Graph),然后搜索并选择 添加自定义事件(Add Custom Event)。将事件命名为 MoveNPC2

5、转到 我的蓝图(My Blueprint) 面板,然后点击 变量(Variables) 旁边的 加号(+) 按钮创建新变量。将变量命名为 TargetList

转到 细节(Details) 面板并点击 变量类型(Variable Type) 旁边的下拉列表。搜索并选择 Actor > 对象引用(Object Reference)

点击Actor选择旁边的 蓝色球体 图标,然后点击 数组(Array) 选项,如下所示。点击 实例可编辑(Instance Editable) 复选框将其启用。

将 TargetList 变量拖动到 事件图表(Event Graph),然后选择选项 Get TargetList。从 TargetList 节点拖出,然后搜索并选择 上一个索引(Last Index)

从 TargetList 节点拖出,然后搜索并选择 Get (a copy)

从 Get 节点的 绿色 引脚拖出,然后搜索并选择 区间内的随机整数(Random Integer in Range)。将 Last Index 节点的 绿色 引脚连接到 Random Integer in Range 节点,如下所示。

从 Get 节点拖出,然后搜索并选择 提升到变量(Promote to variable)。将变量命名为 CurrentTarget,并将其连接到 MoveNPC 节点。

从 CurrentTarget 节点拖出,然后搜索并选择 有效(Is Valid)。将 IsValid 宏节点连接到 Set CurrentTarget 节点。

将 CurrentTarget 变量拖动到 事件图表(Event Graph) 中,然后选择 获取当前目标(Get Current Target)。从 CurrentTarget 节点拖出,然后搜索并选择 获取Actor位置(Get Actor Location)

从 GetActorLocation 节点的 返回值(Return Value) 拖出,然后搜索并选择 获取半径内的随机可达点(Get Random Reachable Point In Radius)。将 半径(Radius) 设置为 100

从 GetRandomReachablePointInRadius 节点的 随机位置(Random Location) 引脚拖出,然后选择 提升到变量(Promote to Variable)。将变量命名为 RandomLocation。将 RandomLocation 节点连接到 IsValid 节点,如下所示。

从 RandomLocation 节点拖出,然后搜索并选择 AI移动至(AI MoveTo)

从 AI MoveTo 节点的 Pawn 引脚拖出,然后搜索并选择 获取对自身的引用(Get a reference to self)。将 RandomLocation 节点的 黄色 引脚连接到 AI MoveTo 节点的 目的地(Destination) 引脚。最后,将 AI MoveTo 节点的 接受半径(Acceptance Radius) 设置为50,如下所示。

从 AI Move To 节点的 成功时(On Success) 引脚拖出,然后搜索并选择 延迟(Delay)。将节点 的 时长(Duration) 设置为4。从 Delay 节点的 已完成(Completed) 引脚拖出,然后搜索并选择 MoveNPC,如下所示。

重复上述步骤,以将这些节点添加到 AI Move To 节点的 失败时(On Fail) 引脚。将 Delay 节点的 时长(Duration) 设置为0.1。

右键点击 事件图表(Event Graph),然后搜索并选择 事件开始播放(Event Begin Play)。从 Event Begin Play 节点拖出,然后搜索并选择 MoveNPC

编译(Compile) 并 保存(Save) 蓝图。将 BP_NPC_ModNavMesh 蓝图拖到关卡中,并在 细节(Details) 面板下,找到 目标列表(Target List),然后点击 添加(+) 按钮以添加新的目标Actor。

点击下拉列表,然后搜索并选择之前创建的 球体(Sphere)Actor。

重新仅构建光照。

本实例创建了一个在一系列目标Actor之间游走的代理。

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

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

相关文章

vuepress-theme-vdoing博客搭建教程

搭建流程 前言 这是笔者搭建个人博客所经历的流程,特附上笔记 笔者个人博客地址:沉梦听雨的编程指南 一、主题介绍 本博客使用的主题为:vuepress-theme-vdoing,相关介绍和使用方法可以参考该主题的官方文档 官方文档快速上手…

力扣趣味题:找不同

经典面向样例编程 char findTheDifference(char* s, char* t) {if(sNULL){return t[0];}for(int x0;x<strlen(s);x){for(int y0;y<strlen(t);y){if(s[x]t[y]){t[y]1;break;}}}for(int x0;x<strlen(t);x){if(t[x]!1){return t[x];}}return NULL; }

银发经济@315:消费、陷阱与孤独的老人

【潮汐商业评论/文】 又是一年315。 这一天&#xff0c;从品牌到消费者&#xff0c;从线下到网络&#xff0c;都不约而同地将目光锁定在大众消费生活和与其相伴的消费“陷阱”上。 这其中&#xff0c;作为“有闲又有钱”且与社会经济发展速度相对有一定“代沟”的老年消费者群…

新加坡大带宽服务器托管优势

在数字化快速发展的今天&#xff0c;服务器托管成为企业拓展业务、提高服务质量的关键环节。而新加坡作为一个国际性的金融、贸易和科技创新中心&#xff0c;其大带宽服务器托管服务在全球范围内享有盛誉。本文将为您科普新加坡大带宽服务器托管的诸多优势。 首先&#xff0c;新…

AXI CANFD MicroBlaze 测试笔记

文章目录 前言测试用的硬件连接Vivado 配置Vitis MicroBlaze CANFD 代码测试代码测试截图Github Link 前言 官网: CAN with Flexible Data Rate (CAN FD) (xilinx.com) 特征: 支持8Mb/s的CANFD多达 3 个数据位发送器延迟补偿(TDC, transmitter delay compensation)32-deep T…

VS Code上,QT基于cmake,qmake的构建方法(非常详细)

VS Code上,QT基于cmake&#xff0c;qmake的构建方法 1 前言2 QT基于cmake的构建方法2.1 VS Code关键插件安装2.2 系统环境变量配置2.3 VS Code中&#xff0c;环境变量配置2.4 Cmake新建一个新的Porject 3 QT基于qmake的构建方法 1 前言 最近&#xff0c;由于认证了github的学生…

RabbitMQ学习总结-延迟消息

1.死信交换机 一致不被消费的信息/过期的信息/被标记nack/reject的信息&#xff0c;这些消息都可以进入死信交换机&#xff0c;但是首先要配置的有私信交换机。私信交换机可以再RabbitMQ的客户端上选定配置-dead-letter-exchange。 2.延迟消息 像我们买车票&#xff0c;外卖…

PHP 生成图片

1.先确认是否有GD库 echo phpinfo(); // 创建一个真彩色图像 $image imagecreatetruecolor(120, 50);// 分配颜色 $bgColor imagecolorallocate($image, 255, 255, 255); // 白色背景 $textColor imagecolorallocate($image, 230, 230, 230); // 黑色文字// 填充背景 image…

MyFileServer

靶场下载地址 https://download.vulnhub.com/myfileserver/My_file_server_1.ova 信息收集 # nmap -sn 192.168.56.0/24 -oN live.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-24 22:07 CST Nmap scan report for 192.168.56.2 (192.168.56.2) Host is up (0.…

Java学习笔记(13)

阶段项目 拼图小游戏 JFrame JMenuBar JMenu JMenuItem 用add方法添加到不同的对象中 添加图片 先创建一个图片ImageIcon的对象&#xff0c;写入图片的路径 再创建JLabel管理容器对象&#xff0c;把图片放到这个容器中&#xff0c;再把容器添加到界面 界面坐标位置 改变图…

nmcli --help(nmcli -h)nmcli文档、nmcli手册

文章目录 nmcli --helpOPTION解释OBJECT解释1. g[eneral]&#xff1a;查看NetworkManager的状态2. n[etworking]&#xff1a;启用或禁用网络3. r[adio]&#xff1a;查看无线电状态&#xff08;例如&#xff0c;Wi-Fi&#xff09;4. c[onnection]&#xff1a;列出所有的网络连接…

openwrt下部署clouddrive2

在启动项上增加启动参数 在exit 0前面增加 mount --make-shared /mnt/data480g注意&#xff0c;后面的/mnt/data480g要替换成你设置的共享映射券。 拉取镜像 docker pull cloudnas/clouddrive2启动镜像 一定要用ssh在后台用docker run命令启动&#xff0c;因为openwrt前台…

AI技术崛起:数据可视化之路更近

在当今AI技术蓬勃发展的时代&#xff0c;数据可视化作为信息传达的重要手段&#xff0c;其门槛逐渐降低。然而&#xff0c;这并不意味着我们可以忽视学习数据可视化的重要性。即使不需要深入专业技术&#xff0c;对数据可视化的基础知识的了解也是至关重要的。那么&#xff0c;…

恢复u盘数据时可以关机吗?深入解析与操作建议

随着科技的飞速发展&#xff0c;U盘已成为我们日常生活中不可或缺的数据存储设备。然而&#xff0c;当U盘中的数据遭遇丢失或损坏时&#xff0c;如何安全有效地恢复数据成为了一个重要的问题。在这个过程中&#xff0c;许多用户可能会疑惑&#xff1a;恢复u盘数据时可以关机吗&…

基于matlab使用 fmincon 函数来进行有约束条件的最小化问题求解

一、一般步骤 生成带有噪声的正态分布数据&#xff1b;定义拟合模型。 model (params, x) normpdf(x, params(1), params(2)); 初始参数猜测 initial_guess [mu, sigma]; 设置约束条件 lb [0, 0]; % 参数的最小值 ub [10, 10]; % 参数的最大值 定义优化问题 opts …

Android studio SDK Manager显示不全的问题解决

发现SDK Manager中只显示已下载的SDK版本&#xff0c;想下载其他版本下载不到&#xff0c;尝试翻墙也没用&#xff0c;修改host文件成功 在多个地点Ping服务器,网站测速 - 站长工具 输入dl.google.com&#xff0c;进行ping检测。 选择一个地址&#xff0c;比如180.163.150.1…

Docker使用(三)Docker底层分析

Docker使用(三)Docker底层分析 四、底层分析 1、Docker镜像原理 1.1 commit镜像 docker commit 提交容器成为一个新的副本 # 命令和git原理类似 docker commit -m“提交的描述信息” -a“作者” 容器id 目标镜像名:[TAG] 实操&#xff1a; # 1、启动一个默认tomcat # …

【并查集】模版

【模板】并查集 - 洛谷 #include <bits/stdc.h> using namespace std; const int N2e59; int a[N]; int Find(int x) {if(xa[x]){return x;}else{a[x]Find(a[x]);return a[x];} } void push(int x,int y) {a[Find(x)]Find(y);return ; } int main() {int n,m; cin>>…

kubernetes部署集群

kubernetes部署集群 集群部署获取镜像安装docker[集群]阿里仓库下载[集群]集群部署[集群]集群环境配置[集群]关闭系统Swap[集群]安装Kubeadm包[集群]配置启动kubelet[集群]配置master节点[master]配置使用网络插件[master]node加入集群[node]后续检查[master]测试集群 集群部署…

【C语言进阶篇】数据在内存中的存储

目录 1.大小端字节序和字节序判断 2.浮点数在内存中的存储与读取 2.1 浮点数在内存中的存储 2.2 浮点数在内存中的读取 在前面的学习中&#xff0c;我们知道内存被划分为一个个小的内存单元&#xff0c;数据就是存储在这些内存单元中的。那么&#xff0c;具体是如何存储的&am…