Unity中利用A*算法实现简单寻路

本文详细介绍了如何在Unity中利用A*算法实现寻路功能。首先,解释了A*算法的基本原理,它通过计算每个格子的F(G+H)值来寻找最短路径。接着,定义了格子类并生成了简单的地图表示,使用TXT文件存储地图信息,并在Unity中读取加载。然后,实现了A*算法的具体步骤,并在Unity环境中创建角色进行寻路测试,最终展示了成功的寻路效果。
摘要由CSDN通过智能技术生成

A*算法理解

A*算法目的在于找到一条能够到达目的地的最短路线,其核心思想是广度优先搜索,以当前格子为中心,遍历周围的格子,通过计算每个格子到达目标点的距离,找出一条能够到达且消耗最小的路径。A*算法中的公式很简单:F =G+H,我是这样理解的:
如图,假设角色需要从A点移动到B点。G代表从A点移动到自身相邻的八个点(A1到A8)所消耗的体力值,因为正方向比斜方向移动的距离短,所以正方向消耗10点体力(A到A5),斜方向消耗14点体力(A到A3);H代表从当前点到终点的横纵坐标之差的绝对值,即曼哈顿距离(从A到B为40,从A5到B为30)。也可以这样理解:G为单次行走消耗的体力值,H表示到达终点还将需要消耗的体力值。当某个点受到阻挡时,需返回到之前的点重新计算。这样一来,地图上每一个格子所代表的点到达终点需要消耗的体力值都被量化,下一步我们要做的事情就是找到一条消耗体力值F最小的路径。
A*示意图

Unity中模拟A*算法

1.定义格子类

格子代表着二维地图中的坐标点,且每个格子有F、G、H值。因此,格子可以用一个类来表示:

public class Node {
//坐标
public int X, Y;
//记录消耗值
public int F, G, H;
//父节点
public Node Parent;

//自动计算H值,估计值
public void CalculateH(Vector2 end)
{
    this.H = (int)(10 * (Mathf.Abs(end.x - X) + Mathf.Abs(end.y - Y)));
}

//自动计算F值
public void CalculateF()
{
    this.F = G + H;
}

public Node(int x, int y, Node parent = null)
{
    this.X = x;
    this.Y = y;
    this.Parent = parent;           
}

public Node(Vector2 point, Node parent = null)
{
    this.X = (int)point.x;
    this.Y = (int)point.y;
    this.Parent = parent;
}
}

2.生成简易的格子地图

由于格子代表一个个坐标点,因此可以利用txt文档存储地图坐标信息,用0表示起始

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值