Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】_unity 2d寻路

前言

还在看别人的寻路逻辑?保姆级教程,一步步教你实现网格寻路逻辑。 超级详细的代码注释,图文步骤详解。写文不易,有帮助的话三连支持下吧~

一,效果展示


二,场景搭建

以一个 9 * 9 的地图为例:

  1. 新建工程,设置屏幕分辨率为: [1080 * 1920],如下图:
    屏幕尺寸
  2. 在自带场景下创建Image作为背景(在Hierarchy右键 --> UI --> Image); 修改其名字为”GridManager“,坐标为: [0, 0, 0],大小为:[1000 * 1000] 并将颜色设置为黑色,完成后效果如下图:
  3. 在"GridManager"下面创建一个空物体,命名为"Grid",将其锚点设置为铺满,并为其添加组件Grid Layout Group,完成后效果如下图:
  4. 在"Grid"下面添加一个Image,并为其添加Button组件,作为点击格子使用,然后Ctrl + D 复制80个,实现效果如下:
  5. 调整"Grid"的Grid Layout Group组件属性值,Left,Top,SpacingX,Y 均设置为10,意思为左边距为10,上边距为10,物体间隔为10,实现后效果如下:

现在这样就已经模拟搭建出类似棋盘场景了,下面看下代码改如何是实现的吧。


三,代码逻辑

  • 寻路二维数组的物体:
/// <summary>
/// 移动方向
/// </summary>
public enum Direction
{
    up, down, left, right
}

public class RoutingObject : MonoBehaviour
{
    /// <summary>
    /// x坐标
    /// </summary>
    public int x;

    /// <summary>
    /// y坐标
    /// </summary>
    public int y;

    /// <summary>
    /// 目标距离
    /// </summary>
    public int targetDistance;

    /// <summary>
    /// 移动距离
    /// </summary>
    public int moveDistance;

    /// <summary>
    /// A\*和值(目标距离+移动距离)
    /// </summary>
    public int moveSum;

    /// <summary>
    /// 是否可以移动
    /// </summary>
    public bool isCanMove;

    /// <summary>
    /// 移动方向
    /// </summary>
    public Direction direction;
}

  • 寻路逻辑:根据传入参数(起始点,结束点,地图),进行查找可移动路线,最后筛选出最短路线。部分代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 寻路
/// </summary>
public class Routing
{
    #region 单例

    Routing() { }

    static Routing instance;

    public static Routing Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new Routing();
            }
            return instance;
        }
    }

    #endregion
    
    /// <summary&g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值