Unity学习笔记--易学易会的unity中A星寻路插件:A*Pathfind Project的使用

2023-05-16

A寻路看似简单,但实际项目中的各种应用是有一定难度的,需要较强的算法功底,不过,幸运的是,Unity Asset Store中已经有了现成的A寻路插件"A* Pathfinding Project"(作者:Aron Granberg),它有免费版和收费两个版本,不过一般免费版足以让我们使用。
下载链接1:http://arongranberg.com/astar/download
下载链接2:https://download.csdn.net/download/qq_42434073/15116553

  1. 先演示下效果:
    在这里插入图片描述

  2. 插件的导入:
    常规方法:Asset-Import Package-Custom Package 选择我们下载好的插件,打开即可:
    在这里插入图片描述
    导入后可以在[Component]工具中看到多出了“Pathfinding”选项:
    在这里插入图片描述

  3. 场景的搭建:
    3.1 新建两个Layer:
    单机[Edit] - [Project Setting] - [Tags and Layers], 创建一个Obstacles 与一个Ground层:
    在这里插入图片描述
    3.2
    (1)在场景中新建一个平面,设置Scale:10,1,10,并在Inspector中将Layer改为“Ground”:
    在这里插入图片描述

(2)动手搭建我们的若干障碍体,然后将这些障碍的Layer全部设置为Obstacles:
在这里插入图片描述
3.3 创建一个Cube 或者Sphere 代替玩家;
在地图上某一位置新建一个物体,作为寻路的终点;
创建一个空物体,命名为A*,作为A的管理器;
3.4 选择A
物体,然后单击[Component] - [Pathfinding] - [Pathfinder] 这时可以看到Inspector面板中出现了一个Astar Path的代码组件:

在这里插入图片描述

单击Graphs,提示添加新的Graph,这里的Graph种类包括Grid Graph、Layered Grid Graph、NavMeshGraph、RecastGraph,可以选择不同的导航图类型;
3.5 先创建一个基于单元的导航图
(1)单击Grid Graph,会生成一个Widthdepth(设置为100100)的规则网格。将Node Size设置为1,Center设置为0,-0.1,0(Y坐标设置为-0.1是为了避免浮点数带来的误差)
在这里插入图片描述

(2)碰撞测试:
在这里插入图片描述
碰撞测试通常都选择胶囊体,
半径与高度根据玩家物体的尺寸调节,最好设置略大一点,保证安全,
碰撞测试的Mask 选择“Obstacles”层
(3)高度测试
在这里插入图片描述
第一个是检测射线投射的高度,第二个选择“Ground”层
(4)Scan浏览一下网格划分
4. 给角色添加代码:
首先选中玩家物体后,选择[Component] - [Pathfinding] - [Seeker] ,这样才能获取到路径
代码的思路:
(1)使用插件的内置函数Seeker.StartPath(起点,终点),寻找路径
(2)当路径搜索结束后,会自动将路点存储起来,我们不断的朝向下一个路点,便可以一步步走到终点;
给玩家添加C#Script 命名为AstarAI,编辑如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Pathfinding;
using System;

public class AstarAI : MonoBehaviour
{
    //目标物体与目标位置
    public GameObject targetObject;
    private Vector3 targetPosition;

    private Seeker seeker;
  
    //存储路径
    public Path path;
    //角色移动速度
    public float speed = 100.0f;
    public float turnSpeed = 5f;
    //判断玩家与航点的距离
    public float nextWaypointDistance = 3;
    //对当前的航点进行编号
    private int currentWaypoint = 0;
    // Start is called before the first frame update
    void Start()
    {
        seeker = GetComponent<Seeker>();
       
        //注册回调函数,在Astar Path完成后调用此函数
        seeker.pathCallback += OnPathComplete;
       
    }
       
    // Update is called once per frame
    void FixedUpdate()
    {
         targetPosition = targetObject.transform.position;
        //开始寻路
        seeker.StartPath(transform.position, targetPosition);
        if (path==null)
        {
            return;
        }
        //当前搜索点编号大于等于路径存储的总点数时,路径搜索结束
        if (currentWaypoint>=path.vectorPath.Count)
        {
            Debug.Log("路径搜索结束");
            return;
        }

        Vector3 dir = (path.vectorPath[currentWaypoint+1] - transform.position);//.normalized;
         dir *= speed * Time.fixedDeltaTime;
       
        //玩家转向
        transform.Translate(Vector3.forward*Time.fixedDeltaTime*speed);
        Quaternion targetRotation = Quaternion.LookRotation(dir);
        transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * turnSpeed);
        //玩家当前位置与当前的航向点距离小于一个给定值后,转向下一个航向点
        if (Vector3.Distance(transform.position,path.vectorPath[currentWaypoint])<nextWaypointDistance)
        {
            currentWaypoint++;
            return;
        }

    }
   /// <summary>
   /// 当寻路结束后调用这个函数
   /// </summary>
   /// <param name="p"></param>
    private void OnPathComplete(Path p)
    {
        Debug.Log("发现这个路线"+p.error);
        if (!p.error)
        {
            path = p;
            currentWaypoint = 0;
        }
    }
    private void OnDisable()
    {
        seeker.pathCallback -= OnPathComplete;
    }
}

  1. 路径的平滑,在Path Modifiiers中包含了路径平滑和简化脚本,也可以直接选中玩家,然后单击[Component] - [Pathfinding] - [Modifiers] - [Simple Smooth],便会生成路线的平滑效果,在Inspector面板中可以修改参数,出现不同的平滑效果。
  2. 开始运行啦。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity学习笔记--易学易会的unity中A星寻路插件:A*Pathfind Project的使用 的相关文章

  • STM32驱动SG90舵机

    STM32驱动SG90舵机 关于SG90舵机SG90转动角度与占空比的关系驱动SG90舵机代码 确定控制引脚 写代码 SG90舵机正常驱动现象总结 关于SG90舵机 SG90是一种小型伺服电机 xff0c 通常用于模型制作和小型机械应用中
  • Arduino驱动L298N控制直流电机的正反转和调速

    Arduino驱动L298N控制直流电机的正反转和调速 一 前言二 产品参数三 驱动直流电机三 接线图四 程序五 实验结果总结 一 前言 本模块使用ST公司的L298N作为主驱动芯片 xff0c 具有驱动能力强 xff0c 发热量低 xff
  • Livox MID-70连接及使用

    ROS下载安装 本文选用ros xff0c 未使用ros2 在Ubuntu18 04下配置ros 下载安装参考 xff1a Ubuntu18 04安装 ROS桌面完整版 其中注意在第8部分 span class token function
  • 微信小程序 宠物论坛1

    微信小程序宠物论坛1 一个简单的论坛包括以下几个方面 xff1a 登录模块发帖模块首页模块帖子详情模块搜索模块个人主页模块 下面将从这6个方面介绍如何用微信小程序开发一个简单的论坛 登录模块 先看界面图 打开小程序首先看到这个界面 xff0
  • 微信小程序宠物论坛6

    微信小程序宠物论坛6 个人主页页面 JS部分 const db 61 wx cloud database Page data openid 34 34 nickname 34 34 heads 34 34 onLoad function o
  • 激光SLAM从理论到实践学习——第三节(传感器数据处理2:激光雷达运动畸变的去除)

    传感器数据处理2 xff1a 激光雷达运动畸变的去除 激光雷达运动畸变的去除比里程计标定更重要 xff0c 但也取决于用的雷达型号 我用的思岚A2雷达频率小于10Hz xff0c 畸变也是比较明显的 概念介绍 激光雷达传感器介绍 xff08
  • Ubuntu16.04 ROS环境中RealSense D435i安装使用

    Ubuntu16 04 ROS环境中RealSense D435i安装使用 弄了三四天 xff0c 网上说法很多 xff0c 有的说需要编译内核 xff0c 然而编译内核下载的补丁特别慢 xff0c 有的说catkin make的需要加其它
  • 计算机网络---传输层(tcp协议,三次握手,四次挥手)

    tcp报头三次握手四次挥手状态改变WIME WAIT状态相关的问题 tcp协议是面向连接 xff0c 可靠传输 xff0c 面向字节流的传输层协议 xff0c 首先我们认识一下tcp的协议报头 源 目的端口 xff1a 表示数据是从哪个进程
  • C++中 对》和《的重载

    在 C 43 43 中 xff0c 左移运算符 lt lt 可以和 cout 一起用于输出 xff0c 因此也常被称为 流插入运算符 或者 输出运算符 实际上 xff0c lt lt 本来没有这样的功能 xff0c 之所以能和 cout 一
  • 深入理解 http 反向代理(nginx)

    要理解什么是 反向代理 reverse proxy 自然你得先知道什么是 正向代理 forward proxy 另外需要说的是 一般提到反向代理 通常是指 http 反向代理 但反向代理的范围可以更大 比如 tcp 反向代理 在这里 不打算
  • 面试必问的红黑树,从根源上探究红黑树的本质

    前言 本文主要讲解下面试经常会问到的红黑树 xff0c 看看究竟是什么神仙鬼怪 二叉树 满足以下两个条件的树就是二叉树 xff1a 本身是有序树 xff08 若将树中每个结点的各子树看成是从左到右有次序的 即不能互换 xff0c 则称该树为
  • C++后台开发面试题总结(涉及C++基础、多线程多进程、网络编程等)

    C 43 43 后台开发面试题总结 涉及C 43 43 基础知识 多线程多进程 TCP IP网络编程 Linux操作 数据结构与算法 因巩固知识体系 xff0c 面试 xff0c 梳理以往看到过的知识点 xff0c 故总结如下相关题目 xf
  • 实战项目:手把手带你实现一个高并发内存池

    项目介绍 1 这个项目做的是什么 xff1f 当前项目是实现一个高并发的内存池 xff0c 他的原型是google的一个开源项目tcmalloc xff0c tcmalloc全称Thread Caching Malloc xff0c 即线程
  • HTTP keep-alive和TCP keepalive的区别,你了解吗?

    1 从文中找出我的IP 2 http请求中是客服端还是服务端主动关闭的tcp连接 xff1f 请阅读到最后的彩蛋部分 HTTP和TCP都是老生常谈的知识点 xff0c 本文不进行铺开赘述 我们可能在HTTP和TCP中都听说 长连接 的说法
  • Linux下各种锁的理解和使用及总结解决epoll惊群问题(面试常考)

    一 锁 锁出现的原因 临界资源是什么 多线程执行流所共享的资源 锁的作用是什么 可以做原子操作 在多线程中针对临界资源的互斥访问 保证一个时刻只有一个线程可以持有锁对于临界资源做修改操作 任何一个线程如果需要修改 xff0c 向临界资源做写
  • 一个10年C++程序员对技术和业务的感悟,献给还在迷茫中的你

    我越来越担心我作为一个C 43 43 程序员的未来 恍然间 xff0c 发现自己在这个行业里已经摸爬滚打了十年了 xff0c 原以为自己就凭已有的项目经验和工作经历怎么着也应该算得上是一个业内比较资历的人士了 xff0c 但是今年在换工作的
  • 大专程序员毕业五年税后18K,想进BAT,网友:吃shi都赶不上热的

    现在很多互联网公司招聘程序员 xff0c 招聘要求上面都明确需要本科 xff0c 并且985 211优先 现在有很多中专大专的程序员很优秀很积极 网友一 xff1a 女生 xff0c 92年 xff0c 毕业四年 xff0c 坐标深圳 xf
  • “天才少年” 27岁华为副总裁 百度CTO 成为阶下囚的传奇经历

    今天的主角是李一男 xff0c 也许你未曾听过他的名字 xff0c 但他却有金光闪闪的履历 毕业于华中科大少年班 xff0c 最年轻的华为副总裁 xff0c 百度CTO xff0c 12580CEO xff0c 金沙江创投合伙人 xff0c
  • 计算机网络---TCP的可靠传输机制和面向字节流传输

    在了解了TCP的面向连接传输之后我们讲解TCP的可靠传输相关的机制和面向字节流传输 一 xff0c TCP的可靠传输 可靠应答机制超时重传机制报文中的序号和确认序号 可靠应答机制 就是在每次发送数据或者请求之后对方都要回复一个应答信号 xf
  • Linux内核必读五本书籍(强烈推荐)

    深入理解Linux内核 推荐等级 xff1a 5颗星 为了透彻理解Linux的工作机理 xff0c 以及为何它在各种系统上能顺畅运行 xff0c 你需要深入到内核的心脏 cPu与外部世界的所有交互活动都是由内核处理的 xff0c 哪些程序会

随机推荐

  • YOLO系列标注文件txt标签类别索引批量修改脚本

    在我们做YOLO类检测网络的自定义训练时 xff0c 有时会将多个独立的数据集合并训练 xff0c 但往往遇到一个问题 xff0c 比如两个独立的数据集中有相同的一类 xff0c 比如船 但是在一个数据集中船的标注文件 txt文件 的索引为
  • 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