Unity A星寻路算法演示

本文介绍如何在Unity中实现A星寻路算法,并通过代码演示其工作原理。提供了AStar.cs和AStarTest.cs两个关键脚本,用于寻路逻辑和模拟演示。读者可以下载Unity工程进行实践,理解A星算法在游戏场景中的应用。
摘要由CSDN通过智能技术生成

>>实现简单A星寻路,并且用Unity模拟演示<<

 

算法原理这里就不再赘述了,网上一大推.我也是参考的https://www.cnblogs.com/lipan/archive/2010/07/01/1769420.html的算法

先上代码---------------------------->>>>>>>>>>>>>>>>

using System;
using System.Collections;
using System.Collections.Generic;

//参考的https://www.cnblogs.com/lipan/archive/2010/07/01/1769420.html的算法

/*寻路算法*/
class AStar
{
    //开表
    List<Point> open_List = new List<Point>();

    //闭表
    List<Point> close_List = new List<Point>();

    //得到开表中的最小F节点
    Point GetMinFPointByOpenList()
    {
        Point p = null;
        foreach (var value in open_List)
        {
            if (p == null || p.G+p.H > value.G+value.H)
            {
                p = value;
            }
        }

        return p;
    }

    /// <summary>
    /// 判断障碍物(0为通路,其他都是障碍)
    /// </summary>
    /// <param name="idx"></下标>
    /// <param name="map"></地图数据>
    /// <returns></true是障碍>
    bool IsHinder(int idx, byte[] map)
    {
        //越界判断
        if (idx >= map.Length)
        {
            return true;
        }

        return map[idx] != 0;

    }

    //判断点是否在开表中
    bool IsPointInOpenList(int x, int y)
    {
        foreach (var p in open_List)
        {
            if (p.X == x && p.Y == y)
            {
                return true;
            }
        }
        return false;
    }

    //判断点是否在闭表中
    bool IsPointInCloseList(int x, int y)
    {
        foreach (var p in close_List)
        {
            if (p.X == x && p.Y == y)
            {
                return true;
            }
        }
        return false;
    }

    //从开表中返回一个坐标数据
    Point GetPointByOpenList(int x, int y)
    {
        foreach (var p in open_List)
        {
            if (p.X == x && p.Y == y)
            {
                return p;
            }
        }
        return null;
    }

    //从闭表中返回一个坐标数据
    Point GetPointByCloseList(int x, int y)
    {
        foreach (var p in close_List)
        {
            if (p.X == x && p.Y == y)
            {
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值