A*寻路入门

基本概念

a*实现算法很多,下文仅以启发式算法为例

公式 F = G + H ,h为当前点至目标点消耗(距离),g为起始点至当前点的消耗(距离) , F为代价

主要做两件事

一.生成导航图

二.计算代价,寻找最少代价的路径



1.生成导航图

a.根据地图的宽度高度决定不同网格尺寸与网格密度

b.检测地图中需要碰撞的物体

2.导航图(图中白点)已生成

a.下面是计算并寻找最小代价路径

定义 开启集合

定义 关闭集合

定义 当前点

将起始点添加到开始集合中

While(开始集合包含至少一个node){

当前点 =开启集合中最小的F值的点

当前点点移除开启集合中

当前点点加入关闭集合中

如果当前点是目标点 结束查询

遍历当前点的每个相邻点

如果相邻点不能访问或则相邻点在关闭集合中,则跳过此相邻点

如果新的路径到相邻点的距离更短(H),或者相邻点不在开启集合中

重设F值

重设其父节点为当前点

如果相邻点不在开启集合中

添加相邻点到开启集合中

}

b.得到关闭集合,与当前点,此时当前点等于目标点,通过回溯当前点可以得到下图,黑色为最终路径,黄色区域为探索过的区域

时间: 2024-12-12 05:29:37

A*寻路入门的相关文章

【转】unity自带寻路Navmesh入门教程(一)

http://liweizhaolili.blog.163.com/blog/static/16230744201271161310135/ 说明:从今天开始,我阿赵打算写一些简单的教程,方便自己日后回顾,或者方便刚入门的朋友学习.水平有限请勿见怪.不过请尊重码字截图录屏的劳动,如需转载请先告诉我.谢谢! unity自从3.5版本之后,增加了NavMesh寻路的功能.在此之前,unity用户只能通过第三方插件(如Astar寻路插件)等做寻路功能.阿赵我也使用过A*寻路插件,A*的原理并不复杂,有

unity自带寻路Navmesh入门教程(一)

说明:从今天开始,我阿赵打算写一些简单的教程,方便自己日后回顾,或者方便刚入门的朋友学习.水平有限请勿见怪.不过请尊重码字截图录屏的劳动,如需转载请先告诉我.谢谢! unity自从3.5版本之后,增加了NavMesh寻路的功能.在此之前,unity用户只能通过第三方插件(如Astar寻路插件)等做寻路功能.阿赵我也使用过A*寻路插件,A*的原理并不复杂,有兴趣的朋友可以自己百度一下.不过由于不是自带的功能,所以在设定网格和烘焙的过程难免会出现很多不便.NavMesh作为unity自带的功能,用法

【转】unity自带寻路Navmesh入门教程(三)

http://liweizhaolili.blog.163.com/blog/static/16230744201271225812998/ 继续介绍NavMesh寻路的功能,接下来阿赵打算讲一下以下两个例子,先看看完成的效果: 第一个例子对于喜欢DOTA的朋友应该很熟悉了,就是不同小队分不同路线进攻的寻路,红绿蓝三个队伍分别根据三条路线进攻. 第二个例子是动态的控制道路的开关.当吊桥打开时,道路不通,当吊桥放下时,道路可以通行. 先来说说第一个例子吧,第一个例子其实很简单,只需要在之前两节的基

【转】unity自带寻路Navmesh入门教程(二)

http://liweizhaolili.blog.163.com/blog/static/16230744201271210237616/ 上一节简单介绍了NavMesh寻路的基本用法,这次来介绍一下稍微复杂一点点的高低落差以及跳跃的做法,首先来看看这次的目标: 由于博客相册上传GIF有限制,所以我把整个过程切开了2部分上传,第一部分是爬楼梯,第二部分是横向跳跃和往下跳落 不管是爬楼梯,还是跳跃,NavMesh都是通过了OffMeshLink来做的.创建OffMeshLink的方法有两种,接下

A*寻路算法入门(一)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 该篇博客由iOS课程团队的Johann Fradj发布,他现在是一个全职开发iOS的开发者.他是Hot Apps Factory(其是App Cooker的创造者)的共同创建

unity自带寻路Navmesh入门教程(三)

继续介绍NavMesh寻路的功能,接下来阿赵打算讲一下以下两个例子,先看看完成的效果: 第一个例子对于喜欢DOTA的朋友应该很熟悉了,就是不同小队分不同路线进攻的寻路,红绿蓝三个队伍分别根据三条路线进攻. 第二个例子是动态的控制道路的开关.当吊桥打开时,道路不通,当吊桥放下时,道路可以通行. 先来说说第一个例子吧,第一个例子其实很简单,只需要在之前两节的基础上修改一下层的设置就可以了. 先来分析一下我们的地形,为了做这个例子,我准备了两个plane分别作为我方基地和地方基地,然后用plane简单

unity自带寻路Navmesh入门教程(二)

上一节简单介绍了NavMesh寻路的基本用法,这次来介绍一下稍微复杂一点点的高低落差以及跳跃的做法,首先来看看这次的目标: 由于博客相册上传GIF有限制,所以我把整个过程切开了2部分上传,第一部分是爬楼梯,第二部分是横向跳跃和往下跳落 不管是爬楼梯,还是跳跃,NavMesh都是通过了OffMeshLink来做的.创建OffMeshLink的方法有两种,接下来会通过制作上面的例子来进行说明: 为了做这个例子,我们预先在场景里面准备了一些物体:摄像机是必须的,一个作为地面的Plane,然后是F1——

A*寻路算法入门(五)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 关于A*算法 现在你该知道如何计算每一个方块的分值了(我们将称之为F,它等于G+H),让我们看看A*算法是如何工作的. 这只猫咪将用以下重复的步骤来找到最短路径: 从开发列表

A*寻路算法入门(四)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 路径评分 我们将给每一个正方形一个分值 G + H : G是从开始点A到当前方块的移动花费.所以对于一个开始A点的邻居方块来说,值为1,但是离开开始点越远它的值会越大. H是