Unity开发2D游戏实现寻路算法——【PolyNav - 2D Pathfinding】插件的使用

2023-05-16

Navmesh2d插件的简单使用说明

      • 2d游戏如何实现寻路算法
      • NavMesh2d插件的简单使用方法
        • 创建2d导航网格
        • 添加寻路组件
      • 简单实现寻路功能的脚本
        • 鼠标点击寻路
        • 自动路径寻路
      • Demo寻路效果
        • 效果gif:
        • demo插件下载
      • 组件属性说明

2d游戏如何实现寻路算法

我们都知道使用Unity开发3D游戏的时候,可以使用原生自带的Navigation组件实现自动寻路导航功能。但是这在开发2d游戏的时候是不支持的,那当我们在开发2的游戏时也有自动寻路功能的需求怎么办?两条路:

  • 使用寻路插件
    常用的2d寻路插件有:A Pathfinding Project Pro和PolyNav - 2D Pathfinding。但这都是官方收费插件,需要使用正版请到官网Asset Store付费下载,当然也可以从网上淘一淘也能找到这个插件包。本文着重介绍PolyNav - 2D Pathfinding寻路插件的使用,能满足一般的2d游戏寻路需求了,文末附插件下载链接哦!
    在这里插入图片描述

  • 手搓寻路算法
    如果使用插件达不到你想要的寻路效果怎么办?或许你有能力可以魔改人家插件代码,以达到你需求;或许你可以参照网上大牛博客写的A*算法,再加以研究,自己手搓一份寻路算法代码咯。

NavMesh2d插件的简单使用方法

创建2d导航网格

  • step1
    新建空物体,自己修改物体命名,然后添加【PolyNav2D】组件和2d碰撞器【Polygon Collider2D】。或者依次点击GameObject / Create Other / PolyNav2D完成添加。

  • step2
    在这里插入图片描述
    点击如上图中【1】处编辑导航区域,手动设置多边形可导航区域大小。
    勾选【2】处属性,改变时重新烘焙导航数据更新
    点击【3】处【Add New Polygon Obstacle】添加障碍区域,点击【Select】可选中编辑禁止区域大小,障碍物可动态添加,点击【Remove】可移除障碍。
    【Radius】:设置半径,表示寻路代理从区域边缘处获取的偏移量。

添加寻路组件

在这里插入图片描述
step1:为需要寻路的物体添加寻路必要的组件【PolyNavAgent】,设置好参数。
step2:编写自定义的寻路脚本,鼠标点击寻路或者自动路径寻路等等。

简单实现寻路功能的脚本

注:该脚本需挂载到寻路物体身上,且物体需挂载有【PolyNavAgent】组件。

鼠标点击寻路

/// <summary>
/// 鼠标点击移动脚本
/// </summary>
[RequireComponent(typeof(PolyNavAgent))]
public class MouseClickToMove : MonoBehaviour{
	
	private PolyNavAgent _agent;//寻路对象
	public PolyNavAgent Agent{
		get
		{
			if (!_agent)
				_agent = GetComponent<PolyNavAgent>();//获取物体上的PolyNavAgent组件
			return _agent;			
		}
	}

	void Update() {
        //鼠标点击某个点,物体寻路到该目标点
		if (Input.GetMouseButton(0))
			Agent.SetDestination( Camera.main.ScreenToWorldPoint(Input.mousePosition));//将鼠标点击位置坐标转换为世界坐标,寻路物体将寻路到改点位置
	}
}

自动路径寻路


/// <summary>
/// 在一些点之间随机移动
/// </summary>
[RequireComponent(typeof(PolyNavAgent))]
public class MoveBetween : MonoBehaviour{

	public List<Vector2> WPoints = new List<Vector2>();//存储随机移动的点

	private PolyNavAgent _agent;
	public PolyNavAgent agent{
		get
		{
			if (!_agent)
				_agent = GetComponent<PolyNavAgent>();
			return _agent;			
		}
	}

	void OnEnable(){
		agent.OnDestinationReached += MoveRandom;//物体到达目的地之后触发回调函数MoveRandom
        agent.OnDestinationInvalid += MoveRandom;//物体变为无效之后触发回调函数MoveRandom
    }

	void OnDisable(){
		agent.OnDestinationReached -= MoveRandom;//物体禁用后移除回调函数
		agent.OnDestinationInvalid -= MoveRandom;
	}


	IEnumerator Start(){
		yield return new WaitForSeconds(1);
		if (WPoints.Count > 0)
			MoveRandom();
	}
    /// <summary>
    /// 随机移动方法
    /// </summary>
	void MoveRandom(){
		agent.SetDestination(WPoints[Random.Range(0, WPoints.Count)]);//随机获取一个点,并寻路到该点位置
	}
}
    //停止寻路导航的函数 
    Agent.stop();

Demo寻路效果

效果gif:

请添加图片描述

demo插件下载

PolyNav2D寻路插件

组件属性说明

  • 【PolyNavAgent】

在这里插入图片描述

属性说明
Max Speed移动的最大速度
Mass代理的质量,质量越大,惯性越大
Stopping Distance代理物体到达目标点的距离
Slowing Distance设置代理从目标开始减速的距离
Deceleration Rate代理在达到目标时减速的速率。
Rotate Transform是否旋转
Rotate Speed勾选旋转时的旋转速度
Avoid Radius是代理与其他代理的回避半径。如果你不需要回避,把它留在0。
Look Ahead Distance是当代理看到障碍物或其他代理具有回避半径时,代理向前看的距离。您可以将此值设置为0,以禁用障碍和代理向前查看并提高性能。
Repath如果启用,地图改变上将重新评估路径。为了性能,一般禁用掉
Restrict如果启用,将强制代理位置在有效区域内。 为了性能,一般禁用掉
Closer Point On Invalid如果请求的目标无效,将使代理转到更接近可能的位置。
Debug Path如果选中,将绘制路径。可以在scene视图里观看
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity开发2D游戏实现寻路算法——【PolyNav - 2D Pathfinding】插件的使用 的相关文章

  • realsense系列(二):录制深度图和RGB图

    录制深度图和RGB图 本次任务使用方法总结 本次任务 利用realsenseviewer软件录制深度图和RGB图 使用方法 1 将realsense连接到计算机上 xff0c 然后打开realsenseviewer软件 xff0c 打开后默

随机推荐

  • realsense系列(三):播放深度图和RGB图

    播放深度图和RGB图 本次任务使用方法总结 本次任务 利用realsenseviewer软件播放深度图和RGB图 使用方法 1 将realsense连接上计算机 然后打开realsenseviewer软件 点击Add Source Load
  • 海思3559万能平台搭建:OSD实时叠加的支持2区域RGN的配置

    前言 位图的生成只是我们字符叠加的基础 xff0c 具体表现就要靠对区域RGN的配置了 调试记录 现在距离移植成功osd也有一段时间了 xff0c 所有所有的报错一时也想不起来太多 xff0c 当时是在焦头烂额没有记录下全部 xff0c 但
  • 在ubuntu中使用命令行下载谷歌浏览器(Linux)

    使用命令行安装谷歌 1 sudo wget http www linuxidc com files repo google chrome list P etc apt sources list d 2 wget q O https dl g
  • TJA1043 CanTrcv

    目录 一 概述 二 功能和优势 2 1 基本功能 2 2 低功耗管理 2 3 保护和诊断 xff08 检测和信号传输 xff09 三 引脚信息 四 功能描述 4 1 五种工作模式 4 1 1 正常模式 4 1 2 仅监听模式 4 1 3 待
  • Git/Gitlab添加SSH秘钥与小乌龟配置

    目录 一 Git Gitlab添加SSH秘钥 二 秘钥添加情况验证 三 小乌龟关联SSH 一 Git Gitlab添加SSH秘钥 xff08 1 xff09 查找是生成sSh秘钥 xff0c 显示文件夹不存在 xff0c 可以生成秘钥 指令
  • 系统分析师之信息化技术(十一)

    目录 一 企业信息化概述 1 1 信息系统的基本概念 1 1 1 什么是信息 1 1 2 什么是信息化 1 1 3 信息系统分类 二 企业信息化规划 2 1 信息化战略体系 2 2 企业战略与信息化战略集成方法 三 信息系统开发方法 3 1
  • 【AUTOSAR】【信息安全】SecOC

    目录 一 概述 二 约束和假设 三 依赖模块 四 功能描述 4 1 安全解决方案的规范 4 1 1 安全解决方案的基本实体 4 1 2 安全的I PDU构建 4 1 3 安全的I PDU验证 4 2 与PduR的关系 4 3 初始化 4 4
  • 计算机网络---网络层

    网络层的作用 IP地址 地址管理 路由选择 1 网络层的作用 首先网络层是为了地址管理和路由选择 xff0c 通过对地址的管理能够保证数据从一台主机上到另一台主机上 xff0c 并且选择合适的路径进行传输 主机 就是PC xff0c 也就是
  • 【AUTOSAR】【通信安全】CRC

    目录 一 概述 二 功能说明 2 1 通用行为 2 2 8位CRC计算 2 2 1 8位SAE J1850 CRC计算 2 2 2 8位0x2F多项式CRC计算 2 3 16位CRC计算 2 3 1 16位CCITT FALSE CRC16
  • 系统分析师之项目管理(十七)

    一 范围管理 范围管理 xff1a 确定项目的边界 xff0c 即哪些工作是项目应该做的 xff0c 哪些工作不应该包括在项目中 二 时间管理 时间管理 xff1a 也叫进度管理 xff0c 就是用科学的方法 xff0c 确定目标进度 xf
  • 【AUTOSA】

    目录 一 概述 二 限制与约束 三 功能描述 3 1 网络通信模式请求的转换 3 2 当前网络通信方式的输出 3 3 外围设备的控制 3 3 1 以太网接口控制器 3 4 多网络 3 5 网络模式状态机 3 5 1 初始化 3 5 2 在亚
  • 【AUTOSAR】【以太网】TCPIP

    目录 一 概述 二 约束和假设 三 依赖模块 3 1 EthIf 3 2 EthSM 3 3 SoAd 3 4 KeyM 3 5 CSM 四 功能说明 4 1 系统扩展性 4 2 IPv4 4 2 1 IPv4 4 2 2 ARP 4 2
  • CMake 链接时出现undefined reference to 错误

    一 问题背景 之前新建了一个项目项目文件分布为 1 src MROR cpp 2 include MROR h 3 main cpp 执行cmake出现undefined reference toxx xff0c 显示main函数中的类成员
  • Ubuntu系统下使用VScode进行CMake编译调试C++程序

    一 前提须知 必须确保你的cmake文件能够编译通过 xff0c 并可以通过make生成可执行文件 二 具体步骤 1 设置CMakeLists txt set CMAKE BUILD TYPE DEBUG 2 VScode调试 VScode
  • 基于TCP协议的Socket编程

    一 基于TCP协议的网络编程 1 TCP IP是一种可靠的网络协议 xff0c 它在通信的两端各建立一个Socket xff0c 从而在通信的两端之间形成网络虚拟链路 xff1b 一旦建立了虚拟的网络链路 xff0c 两端的程序就可以通过虚
  • 示波器抓板子串口,波形错误,杂乱无章

    示波器抓板子串口 xff0c 波形杂乱无章 在使用Hi3559芯片时 xff0c 需要实现串口输出功能 xff0c 实际抓波形时 xff0c 波形杂乱无章 xff0c 感觉很离奇 xff0c 偶然间发现原因 xff0c 在此分享一下 串口信
  • GPS经纬度坐标WGS84到东北天坐标系ENU的转换

    GPS经纬度坐标WGS84到东北天坐标系ENU的转换 常用坐标系介绍地理坐标系 Geographic Coordinate System GCS 地心地固坐标系 ECEF 当地东 北 上 ENU 坐标 基坐标相互转化地理坐标系到地心地固坐标
  • Unity学习笔记--易学易会的unity中A星寻路插件:A*Pathfind Project的使用

    A寻路看似简单 xff0c 但实际项目中的各种应用是有一定难度的 xff0c 需要较强的算法功底 xff0c 不过 xff0c 幸运的是 xff0c Unity Asset Store中已经有了现成的A寻路插件 34 A Pathfindi
  • HTTP常见面试题

    个人总结 xff0c 请勿转载 URL 统一资源定位符 xff1a 就是标识网络中资源的路径 HTTP 超文本传输协议 是一个基于TCP IP通信协议来传递信息 HTTP原理 HTTP协议工作与客户端 服务端架构上 xff0c 浏览器作为H
  • Unity开发2D游戏实现寻路算法——【PolyNav - 2D Pathfinding】插件的使用

    Navmesh2d插件的简单使用说明 2d游戏如何实现寻路算法NavMesh2d插件的简单使用方法创建2d导航网格添加寻路组件 简单实现寻路功能的脚本鼠标点击寻路自动路径寻路 Demo寻路效果效果gif xff1a demo插件下载 组件属