我的Unity3D之路————简单的A*寻路

很多年以前(其实也就3年前),听到A*寻路,我一脸懵逼,不知道是个什么玩意。直到公司有个项目需要用到A*寻路,我才开始了解它。其实网上有很多关于A*寻路的文章,有一些写的特别好,有兴趣的同学可以搜一下。弄懂了原理后,给项目写了一个最简单的A*寻路,这事也就过去了。不知道最近怎么了,想写一些文章了,所以在这里班门弄斧,有什么不足,希望大家指正。这是我的第一遍文章,请轻喷!

A*寻路的原理


这张图网上有很多,是A*经典图片

注意:如图A到B,我们不能走红色的路线,绿色是正确路径之一。为什么不能走红色路线呢?刚开始,我郁闷了好久,后来才弄明白这里的方块就是最小的移动单位(这句话很重要),也就是说这里的方块已经是最小的移动单位了,不可再拆分。红色路线其实又再次的拆分了方块,这个是不对的(具体项目都有自己的最小移动单位,这个一定要弄清楚)。

假设我们要从“绿色方块”到达“红色方块”。那么,从“绿色方块”开始,下次可移动的点有8个,即“绿色方块”周围的8个点。我们每次都需要计算周围8个方块的耗费。

(方块左下角的数值是到“父节点”parentNode的距离,用G表示;右下角的数值是到“红色方块”的距离,用H表示;左上角的数值是G与H的和,用F表示(F=G+H)。

一、首先把“绿色方块”放到一个列表里,我们称它为“开放列表”openList。

二、寻找openList中F值最小的方块,我们称之为S;

三、将S放入另一个列表里,我们称它为“关闭列表”closeList;

四、S周围的8个方块:

      a)如果它在closeList中或者不可通过,忽略;

      b)如果它不在openList中,将它加入openList,并且设置父节点parentNode=S;

      c)如果它在openList中,则假设以S为父节点,重新计算F、G、H——如果新的F小于原来的F,

           则更换父节点parentNode=S,并更新F、G、H的值;

      d)重新对openList排序。

五、重复步骤四,直到停止:1、“红色方块”已经加入到openList,找到目的地;2、openList为空,没有路径可以到达目地。如果是情况1,则我们从“红色方块”开始,沿着每块的父节点parentNode直到“绿色方块”,就是我们要找的路径。

这只是最基础的算法,并没有优化什么的。至于代码,相信难不倒各位。可以上网寻找一些大神的文章,都写的很好,推荐链接:https://www.cnblogs.com/yangyxd/articles/5447889.html

好了,以上就是个人对A*的理解,有什么不对的地方,欢迎指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值