当前位置: 首页 > news >正文

Godot2D角色导航-自动寻路教程(Godot设置导航代理的目标位置)

文章目录

  • 创建导航
  • NavigationAgent2D节点
  • 设置目标位置
  • 其他文章

创建导航

首先,创建一个基本的场景,下面的文章讲解了如何创建一个基本的导航场景,点击如下链接前往该文章:
Godot2D角色导航-自动寻路教程

NavigationAgent2D节点

创建场景之后,我们就来讲一讲NavigationAgent2D这个节点。该节点用于2D的导航代理,它将寻路至某个位置,并且在寻路的过程中能够躲避障碍物,这个障碍物包括静态障碍物和动态障碍物。
躲避动态障碍物使用的是 RVO 防撞算法。
我们可以通过如下代码来获取节点,节点的路径要如实填写,也就是GetNode的参数。

private NavigationAgent2D navigationAgent;navigationAgent = GetNode<NavigationAgent2D>("NavigationAgent2D");

设置目标位置

使用代理,那我们就需要告诉他一个目标位置,然后让它告诉我们移动到那个位置的路径,这个位置我们可以通过设置TargetPosition属性来告诉我们的NavigationAgent2D节点。当TargetPosition属性被设置为一个特定的2D坐标时,导航代理会自动计算并选择路径,以选择尽可能快地路径移动到这个目标位置。

一旦TargetPosition被设置,会向 NavigationServer 请求一条新的从当前代理位置到TargetPosition的导航路径。然后,我们可以通过这个路径,使该节点沿着路径移动,以达到指定的目标位置。

该属性接收一个Vector2类型的值,我们可以为其赋值,代码如下所示:

navigationAgent.TargetPosition=new Vector2(500.0f, 200.0f);

这样或许有些麻烦,因为我们需要打节点名,再打属性名,我们可以使用属性来对其进行一次封装,如下所示:

	public Vector2 MovementTarget{get { return navigationAgent.TargetPosition; }set { navigationAgent.TargetPosition = value; }}

需要注意的是,之前我们说过了,TargetPosition被设置后,会向 NavigationServer 请求一条新的从当前代理位置到TargetPosition的导航路径。而只有在第一帧物理模拟,NavigationServer才可以进行同步,而在第一帧物理模拟之前,导航服务器是无法正常同步的。

这意味着,我们如果直接在_Ready()方法中设置,是会导致错误的,因为_Ready方法会在物理模拟之前执行。此时导航服务器尚未初始化。导航服务器需要先完成初始化和同步,才能够有效地进行导航操作。

所以,我们使用异步等待的方法,来等待第一帧物理模拟,以便导航服务器可以同步。

我们通过使用 async 关键字来声明异步方法。异步方法可以在执行耗时操作时,使程序能够在此期间继续执行其他工作,而不会阻塞线程。这表示我们可以在异步方法内部编写一些长时间运行的操作或需要等待的异步操作。比如说,我们一直等待,直到第一帧物理模拟,然后再为TargetPosition赋值。具体代码如下所示:

	private async void ActorSetup(){// 等待第一帧物理模拟,以便导航服务器可以同步。await ToSignal(GetTree(), SceneTree.SignalName.PhysicsFrame);// 现在导航网格不再为空,可以设置移动目标。MovementTarget = _movementTargetPosition;}

在 ActorSetup() 方法中,我们使用了 await 关键字来等待第一帧物理模拟开始的型号。这意味着代码会暂停执行,直到接收到 PhysicsFrame 信号后才会继续执行下面的代码。

ToSignal 方法,该方法用于监听指定节点的信号。它返回一个 SignalAwaiter对象,配置完成时为指定的节点发出了指定的信号。
ToSignal 方法的参数有两个:

  • source:要监听信号的节点对象。
  • signal:要监听的信号的名称。

而GetTree方法,会返回包含此节点的 SceneTree。

然后我们调用该方法,代码如下所示:

Callable.From(ActorSetup).CallDeferred();

首先,通过使用 Callable.From() 方法,将方法 ActorSetup 转换为一个可调用对象。

接下来,使用 CallDeferred 方法对可调用对象进行延迟调用。延迟调用意味着该方法将在空闲帧期间调用,而不会立即执行。延迟调用的作用是将方法推迟到稍后的时间点执行,以便其他任务有机会执行。CallDeferred 方法可以接收参数,这些参数应与方法的参数列表相匹配。在调用时,传递的参数将作为对应方法的实际参数进行使用。
在这里插入图片描述

另外,我们设置了目标位置后,还需要做其他的工作,这就与Unity有所不同,Unity设置好目标后,就可以自动的向着目标点移动,而在Godot中,我们需要在代码中,自动编写移动逻辑,设置了目标点后,只是让引擎来帮你计算到目标点的路径而已,并不帮你移动。移动代码,我们要自己做。

其他文章

关于信号的讲解可以查看如下文章:

Godot信号教程(使用C#语言)

相关文章:

Godot2D角色导航-自动寻路教程(Godot设置导航代理的目标位置)

文章目录 创建导航NavigationAgent2D节点设置目标位置其他文章 创建导航 首先&#xff0c;创建一个基本的场景&#xff0c;下面的文章讲解了如何创建一个基本的导航场景&#xff0c;点击如下链接前往该文章&#xff1a; Godot2D角色导航-自动寻路教程 NavigationAgent2D节点 …...

R语言实现向量自回归和误差修正模型——附实战代码

大家好&#xff0c;我是带我去滑雪&#xff01; 向量自回归&#xff08;VAR&#xff09;模型和误差修正模型&#xff08;ECM&#xff09;是时间序列分析中常用的两种模型&#xff0c;它们用于研究多个变量之间的动态关系。VAR 模型适用于研究多个相关变量之间的相互影响和动态关…...

原理:用UE5制作一个2D游戏

选中资产图片右键--Sprite Actions--Apply Paper2D Texture Settings 制作场景 把它丢到场景里&#xff0c;并把坐标归零 创建图块集tileset 打开新建的tile set&#xff0c;根据最小图块设置最小尺寸单元 选择需要的图块单元&#xff0c;add box 对新建的tile set右键创建til…...

【ARM 嵌入式 编译系列 11.3 -- GCC attribute packed noreturn constructor 介绍】

文章目录 GCC 的 __attribute__ 是一个编译器扩展特性,允许开发者在源代码中设置函数属性(function attributes)、变量属性(variable attributes)和类型属性(type attributes)。这些属性可以影响函数、变量或类型的行为。 以下是一些常见的 __attribute__ 属性: __at…...

主从Reactor高并发服务器

文章目录 Reactor模型的典型分类单Reactor单线程单Reactor多线程多Reactor多线程本项目中实现的主从Reactor One Thread One Loop各模型的优点与缺点 项目分解Reactor服务器模块BufferSocketChannelEpollerTimerWheelEventLoopAnyConnectionAcceptorLoopThreadLoopThreadPoolTc…...

文心一言Plugin实战来了,测试开发旅游攻略助手

刚刚过去的8月&#xff0c;百度WAVE SUMMIT 深度学习开发者大会上&#xff0c;重磅发布文心一言的五个原生插件&#xff1a;百度搜索、览卷文档&#xff08;基于文档的交互&#xff09;、E 言易图&#xff08;数据洞察图表生成&#xff09;、说图解画&#xff08;基于图片的交互…...

微服务13-Seata的四种分布式事务模式

文章目录 XA模式实现XA模式 AT模式AT模式的脏写问题&#xff08;对同数据并发写的问题&#xff09;其他事务不获取全局锁的一个情况&#xff08;AT模式写隔离的实现&#xff09;实现AT模式 TCC模式TCC实现我们怎么样去判断是否空回滚和业务悬挂&#xff1f;业务分析 Saga模式总…...

C结构体内定义结构体,不能直接赋值。

现像&#xff1a; 如下代码&#xff1a; 头文件&#xff1a; typedef struct aBlinkGpioPinOutAbst_{void (*initAsOutput)(void);void (*high)(void);void (*low)(void); }aBlinkGpioPinOutAbst;typedef struct aBlinkGpioAbst_{ #if GPIO_CONFIG_PA0 GPIO_CONFIG_AS_OUTPU…...

PHP遇见错误了看不懂?这些错误提示你必须搞懂

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 一、错误分类二、系统错误&#xff1a;2.1 编译错误2.2 致命错误2.3 警告错误2.4 通知错误 三、用户错误3.1 错…...

微信小程序备案流程操作详解

1、2023年9月1号小程序开始必须备案了,各位小程序商城只需要按流程自主去微信小程序后台操作即可; 2、对未上架的微信小程序,从2023年9月1号开始需先备案才能上架; 3、对存量已上架的小程序,需在2024年3月31号前完成备案即可。逾期未完成备案,平台将按照备案相关规定于…...

【100天精通Python】Day70:Python可视化_绘制不同类型的雷达图,示例+代码

目录 1. 基本雷达图 2. 多组数据的雷达图 3 交互式雷达地图 4 动态雷达图 0 雷达图概述 雷达图&#xff08;Radar Chart&#xff09;&#xff0c;也被称为蜘蛛图&#xff08;Spider Chart&#xff09;或星型图&#xff0c;是一种用于可视化多维数据的图表类型。雷达图通常由…...

KY258 日期累加

KY258 日期累加 int main() {int n 0; //样例个数cin >> n;//for循环处理n个样例for (int i 0; i < n; i){int y, m, d, num;int days[12] { 31,28,31,30,31,30,31,31,30,31,30,31 };//输入年月日 要加的天数cin >> y >> m >> d >>…...

基于CodeFormer实现图片模糊变清晰,去除马赛克等效果

前言 CodeFormer是一种基于AI技术深度学习的人脸复原模型&#xff0c;由南洋理工大学和商汤科技联合研究中心联合开发。该模型通过结合了VQGAN和Transformer等技术&#xff0c;可以通过提供模糊或马赛克图像来生成清晰的原始图像。可以实现老照片修复、照片马赛克修复、黑白照…...

Docker【部署 05】docker使用tensorflow-gpu安装及调用GPU踩坑记录

tensorflow-gpu安装及调用GPU踩坑记录 1.安装tensorflow-gpu2.Docker使用GPU2.1 Could not find cuda drivers2.2 was unable to find libcuda.so DSO2.3 Could not find TensorRT&&Cannot dlopen some GPU libraries2.4 Could not create cudnn handle: CUDNN_STATUS_…...

前后端分离中,前端请求和后端接收请求格式总结

get请求可以携带的参数 1&#xff09;前端&#xff1a;传统键值对(http:xx?a1&b1) <--> 后端&#xff1a;RequestParam("a") int a , RequestParam("b") int b 2&#xff09;前端&#xff1a;(http:xx/a/b) <--> 后端&#xff1a;Reque…...

pytorch的基本运算,是不是共享了内存,有没有维度变化

可以把PyTorch简单看成是Python的深度学习第三方库&#xff0c;在PyTorch中定义了适用于深度学习的基本数据结构——张量&#xff0c;以及张量的各类计算。其实也就相当于NumPy中定义的Array和对应的科学计算方法&#xff0c;正是这些基本数据类型和对应的方法函数&#xff0c;…...

Visual Studio 2022新建项目时没有ASP.NET项目

一、Visual Studio 2022新建项目时没有ASP.NET项目 1、打开VS开发工具&#xff0c;选择工具菜单&#xff0c;点击“获取工具和功能” 2、选择“ASP.NET和Web开发”和把其他项目模板&#xff08;早期版本&#xff09;勾选上安装即可...

nuiapp项目实战:导航栏动态切换效果实践案例树

测试软件的百忙之中去进行软件开发的工作&#xff0c;开展开发软件的工作事情&#xff0c;也真是繁忙至极点的了。 不到一刻钟的课程内容&#xff0c;个人用了三次去写串联的知识点&#xff0c;然后这是第三次&#xff0c;还是第四次了才完全写出来一个功能的效果。 一刻钟的功…...

【机器学习】集成学习(以随机森林为例)

文章目录 集成学习随机森林随机森林回归填补缺失值实例&#xff1a;随机森林在乳腺癌数据上的调参附录参数 集成学习 集成学习&#xff08;ensemble learning&#xff09;是时下非常流行的机器学习算法&#xff0c;它本身不是一个单独的机器学习算法&#xff0c;而是通过在数据…...

主机jvisualvm连接到tomcat服务器查看jvm状态

​使用JMX方式连接到tomcat&#xff0c;连接后能够查看前边的部分内容&#xff0c;但是不能查看Visual GC&#xff0c;显示不受此JVM支持&#xff0c; 对了&#xff0c;要显示Visual GC&#xff0c;首先要安装visualvm工具&#xff0c;具体安装方式就是根据自己的jdk版本下载…...

MemPrivacy:面向端云智能体的隐私保护个性化记忆管理框架

之前文章介绍过&#xff1a;89.2%攻击成功率&#xff01;腾讯、字节研究发现 OpenClaw Agent 存在可利用结构性漏洞 今天介绍一个 MemPrivacy 项目&#xff0c;来自 MemTensor、荣耀和同济大学的联合团队。 他们的研究让云端智能体能正常"记住你"&#xff0c;但永远看…...

用Keras和MNIST数据集,5分钟搞定一个图像去噪的CNN自编码器(附完整代码)

5分钟实战&#xff1a;用Keras构建图像去噪自编码器的极简指南 当一张布满噪点的老照片在AI处理后重现清晰画面时&#xff0c;这种"数字魔法"背后往往是自编码器在发挥作用。作为深度学习领域的瑞士军刀&#xff0c;自编码器不仅能用于图像去噪&#xff0c;还在数据压…...

碧蓝航线自动化脚本:让游戏管理变得轻松高效

碧蓝航线自动化脚本&#xff1a;让游戏管理变得轻松高效 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研&#xff0c;全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 你是否厌倦了每天重…...

并行LLM推理技术:Hogwild! Inference原理与应用

1. 并行LLM推理的技术背景与挑战在传统Transformer架构中&#xff0c;语言模型的推理过程本质上是顺序执行的——每个新token的生成都严格依赖于之前所有token的注意力计算结果。这种串行特性导致两个显著瓶颈&#xff1a;首先&#xff0c;硬件计算资源利用率低下&#xff0c;特…...

轻量级监控系统Monikhao:自托管部署与核心架构解析

1. 项目概述&#xff1a;一个轻量级、可自托管的监控解决方案最近在折腾个人服务器和家庭网络监控时&#xff0c;发现了一个挺有意思的项目&#xff1a;khaodius/monikhao。乍一看这个名字&#xff0c;可能会觉得有点陌生&#xff0c;但如果你对自建监控系统有需求&#xff0c;…...

百度网盘直链解析工具:告别限速,实现高速下载的Python解决方案

百度网盘直链解析工具&#xff1a;告别限速&#xff0c;实现高速下载的Python解决方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 在数字资源共享日益频繁的今天&#xff…...

Qdrant客户端库实战:从向量数据库连接到生产级应用开发

1. 项目概述&#xff1a;从向量数据库到应用落地的桥梁如果你最近在折腾大模型应用&#xff0c;或者想给自己的产品加上一个“智能大脑”&#xff0c;那你大概率绕不开一个词&#xff1a;向量数据库。简单来说&#xff0c;它就像一个能理解“意思”的超级搜索引擎&#xff0c;不…...

认识Python数据包套接字

如你所知&#xff0c;数据包格式套接字&#xff08;Datagram Sockets&#xff09;也叫“无连接的套接字”&#xff0c;在代码中使用 SOCK_DGRAM 表示。可以将 SOCK_DGRAM 比喻成高速移动的摩托车快递&#xff0c;它有以下特征&#xff1a;强调快速传输而非传输顺序&#xff1b;…...

构建团队技能仓库:从知识管理到可执行技能包的系统化实践

1. 项目概述&#xff1a;从“技能包”到高效能工具箱最近在梳理团队内部的技术资产时&#xff0c;我反复思考一个问题&#xff1a;如何让那些散落在个人电脑、项目文档和口头交流中的“隐性知识”和“高效技能”&#xff0c;变成一个团队可以随时取用、持续进化的公共资产&…...

ITK-SNAP医学图像分割:破解三维解剖结构提取的工程难题

ITK-SNAP医学图像分割&#xff1a;破解三维解剖结构提取的工程难题 【免费下载链接】itksnap ITK-SNAP medical image segmentation tool 项目地址: https://gitcode.com/gh_mirrors/it/itksnap 当我们面对复杂的脑部MRI数据、肿瘤CT扫描或心血管影像时&#xff0c;最大…...