提示:个人学习总结
目录
一.需求分析
我们的地图是一块快的格子,所以肯定需要一个格子对象,根据之前分析,我们可以大致知道里面需要的一些变量
每一个格子对象代表一个格子,那么肯定需要一个管理者来管理这些格子,所以我们还要有一个A*格子的管理者(管理所有的格子)
二.类图梳理
这两个类的关系如下图:
格子类里面的一些大致属性如下图:
A*格子的管理器类的大致属性入下图:
三:核心类的基本结构
格子类:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 格子类型
/// </summary>
public enum E_Node_Type
{
Walk,//可以走的地方
Stop,//不能走的地方
}
/// <summary>
/// A*格子类
/// </summary>
public class AStarNode
{
//格子对象的坐标
public int x;
public int y;
public float f;//寻路消耗
public float g;//离起点的距离
public float h;//离终点的距离
public AStarNode father;//父对象
public E_Node_Type type;//格子的类型
/// <summary>
/// 构造函数,传入坐标和类型
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="type"></param>
public AStarNode(int x,int y,E_Node_Type type)
{
this.x = x;
this.y = y;
this.type = type;
}
}
A*格子的管理器类:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
///A*寻路管理类
/// </summary>
public class AStarMgr:Singleton<AStarMgr>
{
//地图的宽高
private int mapW;
private int mapH;
//地图相关的所有的格子对象容器
public AStarNode[,] nodes;
//开启列表
private List<AStarNode> openList=new List<AStarNode>();
//关闭列表
private List<AStarNode> closeList=new List<AStarNode>();
private Canvas canvas;
/// <summary>
/// 初始化地图信息
/// </summary>
/// <param name="w"></param>
/// <param name="h"></param>
public void InitMap(int w, int h)
{
//根据宽高创建格子 随机阻挡
}
/// <summary>
/// 寻路方法
/// </summary>
/// <param name="startPos"></param>
/// <param name="endPos"></param>
/// <returns></returns>
public List<AStarNode> FindPath(Vector2 startPos,Vector2 endPos)
{
//判断这些格子是否是边界 是否是阻挡点 是否在开启关闭列表中 符合条件放入开启列表
//判断传入的两个点是否合法
//1.是否在地图范围内
//不合法 返回null
//合法 得到起点和终点对应的格子
//2.是否是阻挡点
//清空上一次相关的数据 避免他们影响这一次的寻路计算
//把开始点放入关闭列表
//从起点开始 找周围的点 并放入开启列表中
//左上 x-1 y-1
//上 x y-1
//右上 x+1 y-1
//左 x-1 y
//右 x+1 y
//左下 x-1 y+1
//下 x y+1
//右下 x+1 y+1
//选出开启列表中 寻路消耗最小的点
//找出最优的点 从开启列表中拿出放入关闭列表 在开启列表中移除
//找到这个点 又变成新的起点 进行下一次寻路计算了
//判断这个点是否是终点 是就返回 不是继续找
}
}
基本的结构架子我们已经搭完了,可以试着将核心的逻辑添加上去
四.参考视频
原视频链接:【【手把手教你】Unity中实现A星寻路算法】https://www.bilibili.com/video/BV147411u7r5?vd_source=42f4411b8309016e682f2d58e46aaba7