Unity3D之AStarPathFinding插件的使用

比较以下Unity AStar Pathfinding, NavMesh, Recast Navigation 寻路算法的优点与缺点 Recast Navigation是一种基于网格的寻路算法,它是NavMesh的改进版,可以处理更复杂的地形和障碍物。AStar Pathfinding是一种基于图搜索的寻路算法,它使用启发式搜索来找到最短路径。NavMesh是一种基于网格的寻路算法,它将场景划分为网格,并使用网格来表示障碍物和可行走区域。一、AStar Pathfinding。三、Recast Navigation。 阅读详情

注明:出自  http://blog.youkuaiyun.com/ml3947

对于AStarPathFinding,很多人应该不会陌生。这个算是Unity3D里最好用的寻径插件了。不论是3D游戏,还是2D游戏,我们都可以使用它来进行A*算法的寻径。之前翻译的“使用免费工具进行2D游戏开发”的教程中本来应该有一节是AStarPathFinding寻径的,但是在这个教程翻译了三节之后,发现后面其实作者只是单纯把脚本什么的都给出下载地址,并未做介绍,而对Orthello的介绍在前面几节就结束了,所以就没有继续翻译。这里另外开一篇文章来单独介绍寻径。

  下面我们来看看,应该如何使用AStarPathFinding。


  首先制作一个游戏场景。

  

  大家可以看到,这个是使用了一个Terrain,然后放置了几个房子和灯光以及树木等。

  

  我们创建一个空的Object,然后通过Component->Pathfinding->PathFinder添加脚本。这个是AStarPathFinder里最重要的脚本。将它改名为AStar。


  


  我们可以从右边看到有很多的栏目。

  其实寻径的原理,还是以网格的形式分布到地面,排除掉一些障碍物的相应的层,亦或者进行高度测试使得一定的高度不可行走。然后使用AStar寻径算法来寻找最短的路径。

  首先创建一个Grid Graph。


  

  然后在这边调整网格的数目和大小。

  对于我们的3D游戏而言,网格的大小可以就设置为1( 2d游戏通常根据地图单元格大小来设置)。然后设置Width和Depth调整整个网格的大小。记住高度一定要与地形高度相同。

  最后点最下面的Scan。会搜索出所有可行走的路径,然后以某种颜色的形式显示在网格上。


  这里有几个很重要的参数。

  首先是Max Climb和Climb Axis。这个是指的最大攀爬的高度以及攀爬的轴的方向。通常而言,这个轴一定要与地形垂直,不然地面所有地方将无法通过。


  然后是Collision Test。这里是在寻径中对碰撞的一些检测。

  

  

  例如上图,我们对Default层进行了碰撞的检测,那么在寻径的时候,路径将不会通过这个帐篷的周边。


  


  我们看看内部,内部出了中间放置了一盘食物的位置为寻径无法通过的,其他地方都是可以通过的。


  


  当我们把Collision Test取消选中,然后重新Scan,那么在寻径中,整个帐篷的范围将都列入可行走的范围。


  这里要记住寻径上网格的可移动的范围,并不代表你的角色可以从这些范围行走。它只代表的,寻径算法将把这些范围列入为可通过的。然后,如果你的角色跟帐篷有碰撞,那么即使AStar计算出的路径要穿做帐篷,你的角色也是无法做到的。


  当AStar的PathFinder找到路径是,会在Scene中显示一条绿线。

  

  这条绿线就是寻找到的路径。


  


  同样的,通过限制图层碰撞等,我们也可以在2D游戏中使用AStarPathFinding。如上图,虽然绿线不是很清晰,但我们依然可以看到怪物走到我们角色的路径。


  下面我们来看一下,找到路径之后,怎么对路径进行处理。这里是上面2D游戏里的一些简单脚本。


  

[csharp]  view
plain
copy

  1. public void Start ()  
  2. {  
  3.     controller = GetComponent<Controller> ();  
  4.     seeker = GetComponent<Seeker> ();  
  5.     seeker.pathCallback += searchComplete;  
  6.       
  7.     StartCoroutine(RepeatTrySearch());  
  8. }  
  9.   
  10.   
  11. IEnumerator RepeatTrySearch(){  
  12.     while(true){  
  13.       TrySearchPath();  
  14.       yield return new WaitForSeconds(searchRate);  
  15.     }  
  16. }  
  17.   
  18. IEnumerator WaitForRepath(){  
  19.     if (waitingForRepath) yield break;  
  20.      waitingForRepath = true;  
  21.      yield return new WaitForSeconds(searchRate - (Time.time-lastRepath));  
  22.      waitingForRepath = false;  
  23.      TrySearchPath();  
  24. }  
  25.   
  26. public void TrySearchPath(){  
  27.     if(Time.time - lastRepath >= searchRate && isCanSearch && isCanSearchAgain){  
  28.         lastRepath = Time.time;  
  29.         seeker.StartPath (transform.position, target.position);   
  30.         isCanSearchAgain = false;  
  31.     }else {  
  32.         StartCoroutine(WaitForRepath());      
  33.     }  
  34. }  
  35.   
  36.   
  37.   
  38. public void searchComplete (Path p)  
  39. {  
  40.     path = p;  
  41.     nowPosition = 0;  
  42.     if (path != null) {  
  43.         vPath = path.vectorPath;      
  44.         nextNode = vPath [nowPosition];  
  45.         Debug.Log ("Find Path:" + vPath.Count + "," + vPath [0]);  
  46.     } else {  
  47.         Debug.Log ("Find No Path");   
  48.     }  
  49.     isCanSearchAgain = true;  
  50.     isMoveFinished = false;  
  51. }  


  这是一个重复搜索路径的代码。由于我们的角色在不停的移动,所以怪物需要在一定时间内,改变搜索目标地点,进行二次寻径。

  寻径完成后,我们可以通过path.vectorPath得到一个path数组,里面是一个List<Vector3>类型的链表。记载着路径中的每一个点的坐标。我们可以进行逐个点的移动和处理。

  这就是一个简单的AStar寻径的过程了。



unity有限状态机和模糊状态机(怪物AI、自动寻路) 怪物AI 有限状态机 自动寻路 网格烘焙 阅读详情

相关推荐

Unity3D寻路插件AStarPathfindingProjectPro

1,最强大的Unity3D寻路插件 2,A*寻路 3,A* PathfindingProjectPro最新版 4,集成方便,效率高,兼容最新版Unity

Unity笔记-33-AStarPathFinding算法

Unity笔记-33-AStarPathFinding算法 前言 本篇主要讲解AStarPathFinding算法核心与在Unity中的简单应用,仅限于2D场景。 AStarPathFinding的估量代价 算法核心的寻路依据是估量代价,本算法中使用F表示 F = G + H G表示当前点到起始点的估量代价,H表示当前点到终点的估量代价 地图网格化 对于一个平面地图,对其进行网格化,将其分解为多个格子 蓝色表示障碍物 红色表示起点 绿色表示终点 地图格子 对于每一个地图格子,它都有F,G,H

韩天衣的博客 5208

AStar-Pathfinding:寻路算法学习

AStar-Pathfinding:寻路算法学习

Unity里边的2D导航系统插件学习和推荐

两个障碍中空,寻路最短肯定走中间 多组物体移动的话 推荐算法:鱼群算法 这里推荐的U3D里边的2D导航系统插件 插件1:PolyNav2D 商店收费,CG可以去看看 插件2:AStarPathFinding2D 链接: 介绍网址. 下载网址【下载免费版即可使用】 链接: 下载网址. 基本上去研究实例demo即可 说一些坑: 思维Bug: 放着代理也会挤着过,所以这是非常要明确的一点 Bug 修复...

飞浪纪元FE的博客 1863

unity 寻路插件 *AStarPathfindingProjectProV4.2.17

A* Pathfinding Project 是一个功能强大并且易于使用的 Unity 寻路系统。通过快速的路径寻找,您的 AI 将立即在复杂的迷宫中找到玩家。 非常适合 TD、FPS、RTS 游戏。 功能: 支持网格、导航网格、点和六角形图。自动导航图形生成让你免于手动执行。完全多线程,因此几乎不会影响帧速率。使用光线投射、平滑和漏斗算法进行路径后处理。路径查找调用只需一行代码。可以将图形保存到文件里。在 XZ 平面和 XY 平面上均可局部回避。内含源代码。支持运行时更新图形。

unity3D-AStar-Pro-v4.2.17插件

最新插件版本 unity3D-AStar_Pro_v4.2.17插件

Unity-关于一个3D贪吃蛇的走路算法

记录、分享、成长 862

2022-2028年全球与中国玄武岩连续纤维(BCF)行业深度分析

本文研究全球与中国市场玄武岩连续纤维(BCF)的发展现状及未来发展趋势,分别从生产和消费的角度分析玄武岩连续纤维(BCF)的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。 主要生产商包括: Kamenny Vek TESPE Mafic Technobasalt Russian Basalt ISOMATEX SA Sudaglass Basalt Fiber INNEGRA LAVAint

Fj69258的博客 614

1.unity3d Astar pathfinding 第一个例子

1. 场景准备         先建立一个scene添加一个plane,让其坐标处于(0,0,0),并三方向scale都为10         添加一个新的layer,命名为Ground,并将上面建立的plane设置为Ground层         在plane上添加若干个box作为障碍物,添加一个新的layer,命名为Obstacles, 将这些box都归为这个Obstacle

xiajing13579的博客 1148

Unity布娃娃系统 Ragdoll Mecanim Mixer使用

6. 选完之后,左键下面的hip等角色各个部位不松开鼠标,拖拽连接到上面Amature的各个部位,如图,下面所有部位都连接完之后,第二步点击Configure Selected Bones确认你的部位连接选择。要做一个布娃娃和动画混合的项目,这个插件是比较不错的,搜了一圈文章教程也是抄来抄去,抄的没有头没有尾,自己摸索着用了一下,记录使用过程吧。8. 之后就点击步骤7图一中的Create Ragdoll,会发现player结构发生变化,如图。4. 添加完脚本之后会显示你的player结构,如图。

SuShengQuanshiW的博客 1649

从零开始解析N-CMAPSS数据集:航空发动机健康管理的入门指南

本文详细解析了N-CMAPSS数据集在航空发动机健康管理中的应用,从数据集的构成、关键变量到实际数据分析方法,为初学者提供了全面的入门指南。通过Python代码示例,展示了如何加载、探索和建模这一复杂数据集,帮助读者掌握航空发动机性能预测的核心技术。

weixin_29063979的博客 320

unity打造基于AStar的寻路导航系统

在FindPath方法中,我们首先将起点加入openList中,并循环搜索openList中的节点,直到找到终点为止。基于AStar的寻路导航系统是一种非常常用的游戏开发技术,它可以帮助我们更加高效地实现游戏中的自动寻路功能。NavMeshAgent组件是一种用于控制游戏对象寻路的组件,它可以自动地计算并跟随NavMesh中的路径,并在寻路过程中自动避开障碍物等问题。AStar算法的基本思想是通过估价函数来评估每个节点的优先级,并按照优先级从高到低的顺序进行搜索,直到找到目标节点为止。

voidinit的专栏 892

端侧视觉赋能手游自动化:YOLOv8+NCNN实现低风险挂机与广告拦截

本文提出一种基于端侧AI的移动游戏自动化解决方案,采用YOLOv8目标检测和NCNN推理框架,结合AutoJS实现"感知-决策-执行"闭环。方案通过轻量化模型训练、多分辨率适配和行为拟态优化,解决了传统脚本的适配性和风控问题。关键技术包括:构建游戏专属数据集、模型量化优化、广告拦截和挂机功能实现,具有本地运行、安全稳定等特点,为个人开发者提供了一套完整的自动化开发框架。

milk416666的博客 1263

Astar-for-Unity 开源项目教程

Astar-for-Unity 开源项目教程 1. 项目的目录结构及介绍 Astar-for-Unity 项目的目录结构如下: Astar-for-Unity/ ├── Assets/ │ ├── AstarPathfindingProject/ │ │ ├── Core/ │ │ ├── Editor/ │ │ ├── ExampleScenes/ │ │ ├...

gitblog_01045的博客 773

RK3568/RK3588之修改8250驱动实现RS485收发的自动切换

在串口发送前,若为485,则将控制引脚拉为发送状态,在发送后,循环查看是否发送完成,若发送完成则将引脚置回读状态,如此一来,就能实现在内核测控制方向切换,而不会因为延时造成数据丢失,经过测试此办法可行。全部修改完成后,重新编译生成内核文件和设备树文件,烧写到板子上即可。

哒宰的博客 3114

Python批量注册脚本开发详细

开发一个Python批量注册脚本需要考虑多个方面,包括目标网站的注册流程、验证码处理、请求发送、数据存储等。以下是一个详细的开发流程和代码示例,用于实现基本的批量注册功能。

nsp202505的博客 3346

unity--2d( A*寻路)

unity. 2d. A*寻路

学海无涯 2599

DBC中如何实现报文传输类型属性的配置

AUTOSAR中CAN报文的传输类型主要有三种,周期型,事件型和混合型。周期型:按固定时间间隔自动发送,无需额外的触发条件。事件型:当信号值变化或满足内部条件时立即发送。混合型:默认按周期发送,但事件触发时可提前发送。

sunchengl的博客 303

Unity AI角色寻路 ——A星寻路

Unity 官方 A*Pathfinding Project 插件的使用学习笔记 A* Pathfinding Project 是基于Unity扩展编辑器开发的一款寻路插件,寻路原理是基于AStar寻路新算法,也称作A* 寻路算法。 一、A* 寻路 VS 导航网格NavMesh寻路: A*寻路: 动态寻路,适用于场景状态变化大的,比如游戏,但CPU消耗高 NaveMesh:静态寻路,适用于场景...

冰蝶zh 4215

家用扫地机器人实物拆解报告-从顶盖到每一颗螺丝 · 逐层拆解旗舰扫拖一体机器人

2026年旗舰扫拖机器人拆解报告:采用D形机身设计,主机重4.5kg,基站重12kg。核心配置包括RK3588S+STM32H743双处理器、8颗21700电池、LDS激光雷达和双摄像头+结构光导航系统。创新设计亮点:锥形滚刷自动排毛发、活水循环拖地系统、基站集成450W强力集尘和自动上下水模块(带三重防漏保护)。整机采用模块化设计,关键部件均支持快速更换,在密封性、防呆设计和降本增效方面展现出成熟的工程智慧。

智能硬件研发,欢迎交流 517

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深蓝路径规划 A*作业

1.把起点加入open list。 2.重复如下过程: a.遍历open list,查找F值最小的节点,把它作为当前要处理的节点。 b.把这个节点移到close list。 c.对当前方格的8个相邻方格的每一个方格? ◆如果它是不可抵达的或者它在close list中,忽略它。否则,做如下操作。 ◆如果它不在open list中,把它加入open list...

qq_40606107的博客 3235

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: Unity中添加组件的几种方法
下一篇: unity打包IOS最好不要使用的排序方法
我是一纸巾
博客等级 码龄12年 14粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值