【Unity学习】2D游戏寻路插件 PolyNav - 2D Pathfinding

一、前言

最近在学习寻路算法,我找了一圈插件,发现PolyNav这个插件短小精悍,简单几个类就搞定了,所以学习学习顺便分享出来。

二、简介

PolyNav插件是一款用于2D游戏中的寻路算法实现工具,主要功能是帮助游戏开发者在2D环境中实现角色或物体的路径规划和导航。该插件可以通过Unity平台使用,并且需要从官网Asset Store付费下载。
官方下载地址
使用文档

三、搭建场景

首先创建一个2D新项目,项目名字随意,不要中文名就行。我创建的Unity版本是2021.3.14f1的,后面我会把版本链接分享出来。
在这里插入图片描述
将我们的Polynav包导进来,有3种方式:

  1. 直接在 manifest.json 文件中添加以下内容

       {"com.paradoxnotion.polynav2d": "https://github.com/AlianBlank/com.paradoxnotion.polynav2d.git"}
    
  2. 在Unity 的Packages Manager 中使用Git URL 的方式添加库,地址为:https://github.com/AlianBlank/com.paradoxnotion.polynav2d.git

  3. 直接下载仓库放置到Unity 项目的Packages 目录下。会自动加载识别

现在我们就可以开始愉快的玩耍了~

咱们先创建一个背景,我用一张灰色底图来充当背景
在这里插入图片描述
创建一个空物体,命名为PolyNav,然后添加上PolyNavMap脚本,它会自动添加一个Polygon Collider 2D组件。
在这里插入图片描述
我们先将Shape Type改成Box类型,Polygon Collider 2D也会相应的变成Box Collider 2D。

注:如果是多边形的障碍物可以用Polygon类型,可以自己调节碰撞体积。

在这里插入图片描述
调整一下Box Collider的大小,让它尽量保持跟屏幕大小一致,这个大小区域就是可以导航的区域
在这里插入图片描述
现在咱们来创建几个障碍物,我先创建一个Square(2D Object -> Sprites -> Square),调整好大小,然后再添加上PolyNavObstacle脚本,表明这个对象是一个障碍物,它会默认添加Collider组件,我们把Shape Type类型改成Box。结果一看发现,咦!我创建的Square怎么看不见呢,只看到碰撞体?别急,咱们修改下层级就能看到了。
在这里插入图片描述
然后再复制几个,摆好阵势,再将这些Square放进一个空对象上,方便管理~
在这里插入图片描述
好了,现在来创建我们的主角,也就是Agent。

新建一个Circle(2D Object -> Sprites -> Circle),调整层级为1,添加上PolyNavAgent脚本,将我们之前创建的PolyNav对象赋值到Agent的Map上。
在这里插入图片描述
好了,咱们的场景就搭建完成了,现在开始写我们的代码~

四、编写控制逻辑

新建一个空物体,命名为GameController,添加一个脚本GameController.cs。代码如下:

using PolyNav;
using UnityEngine;

public class GameController : MonoBehaviour
{
    [SerializeField]
    private PolyNavAgent _agent;
    [SerializeField]
    private Camera _camera;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Vector2 touchDownPos = Input.mousePosition;
            Vector2 worldPos = _camera.ScreenToWorldPoint(touchDownPos);
            RaycastHit2D hit = Physics2D.Raycast(worldPos, Vector2.zero);
            if (hit.collider != null)
            {
                _agent.SetDestination(hit.point);
            }
        }
    }
}

给我们的_agent和_camera赋上值之后就可以了。
在这里插入图片描述
运行游戏看看!点击屏幕,发现咱们的主角不会动,原因是hit.collider检测到是null,所以我们给Bg添加上Box Collider 2D就可以了。
在这里插入图片描述

完整效果如下:
在这里插入图片描述

五、项目源码

这个demo其实特别简单,不过我这里还是放出源码地址给大家看看~
github地址:https://github.com/Lucky-xb/UnityPolyNav.git
unity2021.3.14f1版本地址:https://unity.com/releases/editor/whats-new/2021.3.14

注:也可以通过UnityHub下载,在浏览器里打开这个链接就会跳转到UnityHub下载:unityhub://2021.3.14f1/eee1884e7226

六、小结

用过这个插件之后发现还是有些问题的,比方说寻路的路线不够准确
在这里插入图片描述

从A–>B,正常的寻路来说应该是A–>D–>B,但是这个寻路有可能会出现A–>C–>B的情况。小悠技术有限,暂时还没找到解决方法,看看各位大神能不能搞定了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值