找了份新工作之后,忙的要死,都没时间鼓捣博客了,深深的感受到资本家的剥削,端午节连粽子都没有,每天下班累得跟条咸鱼一样(可能就是)。
刚好最近忙里偷闲,就来写写unity在2D下的AStar寻路算法。
地图用untiy的tilemap来贴。
大概的效果,没有去找好看的图片,将就弄点颜色表示:
黑色表示障碍,绿色表示路径,开头和结尾也是用的绿色,好懒o(╥﹏╥)o
原理和详细解释,还是参考的这位国外的大神:
https://www.redblobgames.com/pathfinding/a-star/introduction.html
解说如下:
A*算法其实可以理解为是贪心算法和广度优先搜索算法的结合体。
广度优先搜索算法,每次都可以找到最短的路径,每走一步都会记下起点到当前点的步数,优点是绝对能找到最短的路径,缺点就是地图越大计算量会变得很巨大。
贪心算法,每次都是走当前点距离终点最近的格子,在没有障碍的情况下效率很高,但是如果有障碍的话,就很绕路。
A*算法结合两者,计算当前走过的步数 与 当前点到终点的距离 之和作为走格子的依据,优点就是当有障碍物时,能找到最短距离并且计算量没有广度优先搜索大,没有障碍物时,效率和贪心算法一样高。
其实代码量没多少,直接贴出来了,具体也不解释,看注释吧,我好懒。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;
public class MapBehaviour : MonoBehaviour
{
public Vector2Int mapSize;//地图尺寸
public Tilemap tilemap;
public Tile normalTile;//白色tile
public Tile obstacleTile;//黑色tile
public T