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

Godot2D角色导航-自动寻路教程(Godot获取导航路径)

文章目录

  • 开始准备
  • 获取路径
    • 全局点坐标

开始准备

首先创建一个导航场景,具体内容参考下列文章:
Godot实现角色随鼠标移动
然后我们需要设置它的导航目标位置,具体关于位置的讲解在下面这个文章:
Godot设置导航代理的目标位置

获取路径

获取路径我们需要使用GetNextPathPosition()方法,在将物体的目标位置设置好了之后,我们就可以通过这个方法来获取可以移动到目标位置的路线。
GetNextPathPosition()方法返回下一个全局坐标系中可以移动到的位置,并且可以确保路径上没有静态对象。如果代理没有找到一条可以移动的路径,它将返回代理父级的位置。

使用该方法的示例代码如下:

using Godot;public partial class MyCharacterBody2D : CharacterBody2D
{private NavigationAgent2D _navigationAgent;public override void _Ready(){base._Ready();_navigationAgent = GetNode<NavigationAgent2D>("NavigationAgent2D");}public override void _PhysicsProcess(double delta){base._PhysicsProcess(delta);Vector2 nextPathPosition = _navigationAgent.GetNextPathPosition();}
}

注意,我们获取到的是全局的坐标,而不是局部坐标或者说是方向向量,但是我们可以通过一些手段,来将其计算为方向向量,供我们移动,示例代码如下:

		Vector2 currentAgentPosition = GlobalTransform.Origin;Vector2 nextPathPosition = _navigationAgent.GetNextPathPosition();Velocity = currentAgentPosition.DirectionTo(nextPathPosition) * _movementSpeed;MoveAndSlide();

这段代码在每个物理帧中通过路径导航系统,将代理角色移动到下一个路径位置。首先,我们定义了一个currentAgentPosition变量,通过GlobalTransform.Origin获取代理角色的当前位置,即全局坐标系的原点位置。

使用_navigationAgent.GetNextPathPosition()方法获取下一个路径位置,并将其存储在nextPathPosition变量中。

通过currentAgentPosition.DirectionTo(nextPathPosition)方法获取一个指向下一个路径位置的向量,然后乘以_movementSpeed变量来确定角色移动的速度。

使用MoveAndSlide()方法将代理角色根据计算得到的速度进行移动。该方法会自动处理碰撞和滑动,使得代理角色在不与障碍物发生碰撞的情况下移动到目标位置。

全局点坐标

我们通过GetNextPathPosition方法获取到的全局点的坐标,并不是直接就到了你的目标位置点,而是通过网格计算出来的,该方法获取到的全局坐标,是你当前角色所位于的网格内的坐标。
这句话大家可能并不是很理解,简单来说,这个坐标,无法脱离你的网格,最远,就只能到你的网格的边界了。
下面放出三张图,来帮助大家理解一下:
在这里插入图片描述
如上图所示,这是我们创建的导航区域,也就是角色可以移动的区域,仔细观察你会发现,他并不是一整块的,而是由一个一个相邻的网格组成。设定目标位置后,程序会计算到目标位置需要经过哪一些网格。

如下图所示,红点是我们此时的目标位置,灰色小人是GetNextPathPosition方法返回给我们的位置。

当目标位置不在当前网格的时候,他返回的全局坐标是当前网格内离下一个目标点最近的某一点的坐标,也就是网格最边界的某点。注意,这里我说的是下一个目标点,而不是最终目标点,程序会根据导航网格来计算需要经过哪些网格,这其中涉及寻路算法。
在这里插入图片描述
如下图所示,当目标点位于当前网格内部,则会直接返回目标点的全局位置。
在这里插入图片描述

相关文章:

Godot2D角色导航-自动寻路教程(Godot获取导航路径)

文章目录 开始准备获取路径全局点坐标 开始准备 首先创建一个导航场景&#xff0c;具体内容参考下列文章&#xff1a; Godot实现角色随鼠标移动 然后我们需要设置它的导航目标位置&#xff0c;具体关于位置的讲解在下面这个文章&#xff1a; Godot设置导航代理的目标位置 获取…...

用c++写一个高精度计算的减法运算

这段代码是一个用C编写的程序&#xff0c;它实现了两个大整数的减法运算。 #include<iostream> #include<cstdio> #include<cstring> using namespace std;int main(){int a[256],b[256],c[256],lena,lenb,lenc,i;char n[256],n1[256]"1001",n2[2…...

基于白鲸优化的BP神经网络(分类应用) - 附代码

基于白鲸优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于白鲸优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.白鲸优化BP神经网络3.1 BP神经网络参数设置3.2 白鲸算法应用 4.测试结果&#xff1a;5.M…...

Matlab遗传算法工具箱——一个例子搞懂遗传算法

解决问题 我们一般使用遗传算法是用来处理最优解问题的&#xff0c;下面是一个最优解问题的例子 打开遗传算法工具箱 ①在Matlab界面找到应用程序选项&#xff0c;点击应用程序(英文版的Matlab可以点击App选项) ②找到Optimization工具箱&#xff0c;点击打开 创建所需要…...

Coreldraw2020最新64位电脑完整版本下载教程

安装之前所有的杀毒软件都要退出。无论是360&#xff0c;腾讯管家&#xff0c;或者电脑自带的安全中心&#xff0c;要不然会阻止安装。 CorelDRAW2020版win下载如下:https://wm.makeding.com/iclk/?zoneid55678 CorelDRAW2020版mac下载如下:https://wm.makeding.com/iclk/?…...

第一节——vue安装+前端工程化

作者&#xff1a;尤雨溪 官网&#xff1a;简介 | Vue.js 脚手架文档 创建一个项目 | Vue CLI 一、概念&#xff08;了解&#xff09; 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&…...

vue集成钉钉单点登录

初始环境判断 判断是否是来自钉钉环境的访问&#xff0c;返回&#xff1a;boolean类型值 window.navigator.userAgent.includes("DingTalk")前端引入vue中钉钉相关的依赖&#xff0c;并获取钉钉的临时授权码 import * as dingtalk from dingtalk-jsapi; let that …...

凉鞋的 Godot 笔记 203. 变量的常用类型

203. 变量的常用类型 在上一篇&#xff0c;我们对变量进行了概述和简介&#xff0c;知识地图如下&#xff1a; 我们已经接触了&#xff0c;变量的字符串类型&#xff0c;以及一些功能。 在这一篇&#xff0c;我们尝试多接触一些变量的类型。 首先是整数类型。 整数类型 整…...

【现场问题】批量新建工作流的问题

批量建工作流的优势和劣势 关于批量建工作流的优势缺点 关于批量建工作流的优势 不需要手动&#xff0c;直接一键建立&#xff0c;同时节点的批量建立也成功了 缺点 1、机器识别&#xff0c;一次性成形&#xff0c;没有办法手动的去干涉这东西 2、大数据量的表需要单独处理的…...

动态规划14(Leetcode516最长回文子序列)

代码&#xff1a; class Solution {public int longestPalindromeSubseq(String s) {int n s.length();int[][] dp new int[n][n];for(int in-1;i>0;i--){dp[i][i] 1;char c1 s.charAt(i);for(int ji1;j<n;j){char c2 s.charAt(j);if(c1c2){dp[i][j] dp[i1][j-1]2…...

写一个简单的解释器(0) 简介和目标

解释语言和编译语言 编译语言&#xff0c;是指其编译器生成的可执行文件为机器码&#xff0c;可以直接在计算机上运行的语言&#xff0c;比如说 C/C \texttt{C/C} C/C 。 解释语言&#xff0c;是指经由解释器生成的可执行文件为字节码文件&#xff0c;只能运行在特殊的虚拟机…...

通过Chain Prompts方式将LLM的能力引入测试平台:正交实验测试用例生成

通过Chain Prompts方式将LLM的能力引入测试平台:正交实验测试用例生成 Chain Prompts Chain Prompts是指在一个对话或文本生成任务中,将前一个提示的输出作为下一个提示的输入,形成一个连续的链条。这种方法常常用于创建连贯的、有上下文关联的文本。在对话系统中,这种方…...

M-BUS和modbus的区别是什么?

M-BUS与Modbus是两种在工业自动化和楼宇自动化领域广泛应用的通信协议。那么&#xff0c;这两种通信协议有哪些区别呢?下面&#xff0c;就由小编带大家一起来了解下吧! 一、简介 M-BUS(Multi-dropBus&#xff0c;多点通信总线)和Modbus(莫迪波特率)都是用于设备和系统之间通信…...

CSS 滚动驱动动画 timeline-scope

timeline-scope 语法兼容性 timeline-scope 看到 scope 就知道这个属性是和范围有关, 没错, timeline-scope 就是用来修改一个具名时间线(named animation timeline)的范围. 我们介绍过的两种时间线 scroll progress timeline 和 view progress timeline, 使用这两种时间线(通…...

R语言时间序列分析

目录 概述 1、什么是时间序列分析 2、时间序列分析的应用 时间序列的基本操作...

房产中介小程序,二手房小程序带H5公众号,房产门户PC版,房产中介,房产经纪人

套餐一:源码=1500 套餐二:全包服务 包服务器+APP+认证小程序+H5+PC+采集=2000(全包服务三年) 可以封装打包APP 一、付费发布信息 支持付费发布、刷新、置顶房源信息; 二、个人发布信息 支持个人和房产经纪人发布房源信息; 三、新房楼盘模块 支持新房楼盘功能,后台添加…...

Docker 部署

1 完全清除旧版本docker for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; doneImages, containers, volumes, and networks stored in /var/lib/docker/ arent automatically removed when y…...

ffmpeg推流+nginx转发+拉流(RTMP拉流)

参考:https://blog.csdn.net/weixin_43796767/article/details/117307845 1.搭建支持rtmp转发的nginx服务 git clone https://github.com/arut/nginx-rtmp-module wget http://nginx.org/download/nginx-1.8.0.tar.gz tar -xvf nginx-1.8.0.tar.gz cd nginx-1.8.0/ ./confi…...

【Python第三方包】解析和生成二维码(pyqrcode包)

文章目录 前言一、安装pyqrcode包二、生成二维码2.1 二维码生成基础使用2.2 自定义二维码样式颜色设置错误纠正级别尺寸设置三、解析二维码总结前言 在现代信息时代,二维码(QR码)已经成为了快速传递信息的常见方式。Python提供了多种第三方包,用于生成和解析二维码。其中,…...

自适应键盘高度

自适应系统键盘 背景代码demo 背景 键盘高度无法获取&#xff0c;倒是输入框抖动问题 代码 设置 android:windowSoftInputMode“adjustNothing” public class KeyBoardHelper {private static final String TAG "KeyBoardHeightHelper";private PopupWindow po…...

Cgo 回调中处理 const char- 参数的正确方法

本文详解如何在 Cgo 中为带 const char* 参数的 C 回调函数编写兼容的 Go 导出函数&#xff0c;解决因 const 修饰符导致的类型冲突编译错误&#xff0c;并提供安全、可移植的实践方案。 本文详解如何在 cgo 中为带 const char* 参数的 c 回调函数编写兼容的 go 导出函数&…...

别再死记硬背了!PADS Logic/Layout/Router 三大组件核心快捷键与无模命令实战指南

PADS三剑客高效操作手册&#xff1a;从快捷键到无模命令的进阶实战 在PCB设计领域&#xff0c;效率就是生命线。当项目周期压缩到以小时计算时&#xff0c;那些依赖鼠标在菜单栏里反复点击的操作方式&#xff0c;就像用打字机写代码一样令人抓狂。PADS作为业界主流工具链&#…...

歌词滚动姬:零基础打造专业LRC歌词的终极免费工具

歌词滚动姬&#xff1a;零基础打造专业LRC歌词的终极免费工具 【免费下载链接】lrc-maker 歌词滚动姬&#xff5c;可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 歌词滚动姬&#xff08;lrc-maker&#xff09;是一款专…...

从单表到多模块:MyBatis-Plus-Generator 3.5.2 在微服务项目中的高级玩法与避坑指南

从单表到多模块&#xff1a;MyBatis-Plus-Generator 3.5.2 在微服务项目中的高级玩法与避坑指南 当你的项目从单体架构演进为微服务体系时&#xff0c;那些曾经得心应手的工具链往往会暴露出新的挑战。MyBatis-Plus-Generator作为持久层开发的利器&#xff0c;在单体项目中可能…...

2025届必备的十大降AI率神器横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 而今学术氛围范围里&#xff0c;论文重复检查比率直接对毕业以及发表产生影响。大量降低字数…...

深入解析Android SQLite Asset Helper:核心源码实现原理

深入解析Android SQLite Asset Helper&#xff1a;核心源码实现原理 【免费下载链接】android-sqlite-asset-helper An Android helper class to manage database creation and version management using an applications raw asset files 项目地址: https://gitcode.com/gh_…...

从菜鸟到高手:我的Abaqus壳单元S4R、S3R、S8R选择心路历程

从菜鸟到高手&#xff1a;我的Abaqus壳单元S4R、S3R、S8R选择心路历程 第一次打开Abaqus的单元库时&#xff0c;我被琳琅满目的壳单元类型晃花了眼。S4R、S3R、S8R、STRI65、S9R5...这些看似随意的字母数字组合&#xff0c;背后却隐藏着影响仿真精度的关键密码。作为一名从土木…...

QQ音乐解析工具:2025年高效获取音乐资源的Python解决方案

QQ音乐解析工具&#xff1a;2025年高效获取音乐资源的Python解决方案 【免费下载链接】MCQTSS_QQMusic QQ音乐解析 项目地址: https://gitcode.com/gh_mirrors/mc/MCQTSS_QQMusic QQ音乐解析工具是一个基于Python开发的实用程序&#xff0c;能够帮助用户从QQ音乐平台获取…...

我的雕刻机终于不丢步了:记录用MKS SERVO42D闭环电机+STM32F103解决丢步问题的全过程

从开环到闭环&#xff1a;用MKS SERVO42DSTM32彻底解决雕刻机丢步难题 去年冬天&#xff0c;我的DIY雕刻机在雕刻一块黄铜纪念牌时&#xff0c;Z轴突然失控下坠&#xff0c;不仅毁了工件&#xff0c;还折断了0.2mm的钨钢铣刀——这是开环步进电机丢步的典型症状。经过三个月的研…...

2026 AI狂潮下,软件测试:有人被裁,有人月薪50K+

&#x1f4dd; 面试求职&#xff1a; 「面试试题小程序」 &#xff0c;内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试&#xff0c;命中…...