如何使用Unity做游戏中的寻路导航寻路

给我们留言
地址:福建省晋江市青阳街道洪山路国际工业设计园纳金网
(周一到周五, 周六周日休息)
设计师入口
查看: 2397|回复: 6
最后登录注册时间阅读权限20积分272
设计实习生, 积分 272, 距离下一级还需 228 积分
纳金币118 精华0
用Unity自带的烘培或者NavMesh Extension插件烘培导航网格都会出现,烘培模型顶点过多,烘培就会有问题导致运行的时候Unity崩掉。请问有解决办法吗?或者有其他寻路插件可以单个模型烘培出NavMesh嘛而不是像烘培灯光贴图把以前烘培的所有东西清除在整个一块烘培,这样就会出现烘培导航网格顶点过多而出现问题。
最后登录注册时间阅读权限90积分23577
资深设计师, 积分 23577, 距离下一级还需 26423 积分
纳金币20302 精华62
Nav的插件不是还挺多的吗? a path finding这类的
最后登录注册时间阅读权限30积分567
初级设计师, 积分 567, 距离下一级还需 433 积分
纳金币34 精华0
Nav不是也各异单个生成导航网格么?
最后登录注册时间阅读权限20积分272
设计实习生, 积分 272, 距离下一级还需 228 积分
纳金币118 精华0
soulhez 发表于
Nav不是也各异单个生成导航网格么?
不可以的请问怎么单个生成
最后登录注册时间阅读权限20积分272
设计实习生, 积分 272, 距离下一级还需 228 积分
纳金币118 精华0
王者再临 发表于
Nav的插件不是还挺多的吗? a path finding这类的
请问a path finding能避免这样的问题出现嘛
最后登录注册时间阅读权限50积分1346
助理设计师, 积分 1346, 距离下一级还需 654 积分
纳金币505 精华0
试试这个插件
, 不需使用NavMesh .
- 但需优化其demo, drawcalls 太多
最后登录注册时间阅读权限90积分6669
高级设计师, 积分 6669, 距离下一级还需 3331 积分
纳金币2715 精华0
Good to know !
站长推荐 /3
纳金名模-设计师都知道的模型专辑:重装出发,为您提供高精尖的3d模型专辑。这样的福利我和我的小伙伴们都惊呆了!!下载地址:
纳金论坛APP 1.5.0(Android)版本已于日在纳金网论坛上线,欢迎下载!
应纳米们要求,新设【SOLIDWORKS】【UE4】2个板块,欢迎交流!
Powered by - X2.5
Narkii Inc.65003人阅读
unity(12)
现在的大部分mmo游戏都有了自动寻路功能。点击场景上的一个位置,角色就会自动寻路过去。中间可能会有很多的障碍物,角色会自动绕过障碍物,最终达到终点。使用Unity来开发手游,自动寻路可以有很多种实现方式。第一种比较传统的是使用A星寻路,它是一种比较传统的人工智能算法,在游戏开发中比较常用到。大部分的页游和端游都用到这种技术。在Unity游戏也可以用这种技术,Asset Store上面已经有相关的组件了,感兴趣的同学可以自己去了解。我在后面有机会再来详细介绍了。今天我们来学习Unity官方内置的寻路插件-Navmesh。由于内容比较多,我们将分几次来系统学习。今天先通过学习一个最简单的例子来入门。
(转载请注明原文地址)
我们要实现一个功能:点击场景中的一个位置,角色可以自动寻路过去。角色会绕过各种复杂的障碍,找到一条理论上”最短路径“。
1.创建地形
2.添加角色
3.创建多个障碍物,尽量摆的复杂一点,来检查Navmesh的可用性和效率。
4.选中地形,在Navigation窗口中,设置Navigation Static
5.依次选中障碍物,在avigation窗口中,设置Navigation Static
7.Navigation窗口中,选择Bake(烘焙)界面,点击Bake按钮,进程场景烘焙,就可以烘焙出寻路网格了
8.为角色添加NavMeshAgent组件。Component-&Navigation-&Nav Mesh Agent
9.为角色新增一个脚本PlayerController.cs,实现点击目标,自动寻路功能
using UnityE
using System.C
public class PlayerController : MonoBehaviour
private NavMeshA
void Start()
//获取组件
agent = GetComponent&NavMeshAgent&();
void Update()
//鼠标左键点击
if (Input.GetMouseButtonDown(0))
//摄像机到点击位置的的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
//判断点击的是否地形
if (!hit.collider.name.Equals(&Terrain&))
//点击位置坐标
Vector3 point = hit.
transform.LookAt(new Vector3(point.x, transform.position.y, point.z));
//设置寻路的目标点
agent.SetDestination(point);
//播放动画,判断是否到达了目的地,播放空闲或者跑步动画
if (agent.remainingDistance == 0)
animation.Play(&idle&);
animation.Play(&run&);
完成了,可以看看效果:
1.角色身上的Nav Mesh Agent 组件
Radius 半径: 代理的半径(仅用于寻路目的,可以跟实际对象的半径大小不一样,一般比实际对象的半径大)。
Speed 速度: 代理可以周游世界,走向它的目的地的最大移动速度。
Acceleration 加速度: 最大加速度。
Angular Speed 角速度: 最高转速(度/秒)。
Stopping distance 制动距离:制动距离。到目的地的距离小于这个值,代理减速。
Auto Traverse OffMesh Link 自动遍历OffMesh链接:自动移动并关闭OffMeshLinks
Auto Repath 自动重新寻路:如果现有的部分已失效,获得新的路径。
Height 高度:代理的高度(用于调试图形)。
Base offset 基本偏移:碰撞几何体相对于实际几何体垂直的偏移。
Obstacle Avoidance Type 障碍躲避类型 :躲避的质量水平。
NavMesh Walkable 导航网格行走:指定代理可以遍历的导航网格层类型。这个参数很有用,在接下来的实例中可以用到。
2.障碍物一定要有Mesh Render,用于烘焙寻路网格。
这个实例可以很简单的让我们学会如何最基本的使用自动寻路组件Nav。但是,这个组件还提供了更加强大的功能,比如,起始点和目标点中间出现阻断了,
怎么办?在下面的文章中,我们将会继续探寻其他强大的功能。
2.http://liweizhaolili./
3./Components/class-NavMeshAgent.html
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:514377次
积分:2776
积分:2776
排名:第13659名
原创:14篇
评论:146条
有任何问题欢迎交流
(1)(1)(11)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
当前位置: &
查看: 8190|回复: 10
unity自带寻路Navmesh入门教程(一)
16排名1昨日变化主题帖子积分
蛮牛币267682
在线时间2017 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
8471498.gif (557.51 KB, 下载次数: 5)
09:33 上传
& && &unity自从3.5版本之后,增加了NavMesh寻路的功能。在此之前,unity用户只能通过第三方插件(如Astar寻路插件)等做寻路功能。阿赵我也使用过A*寻路插件,A*的原理并不复杂,有兴趣的朋友可以自己百度一下。不过由于不是自带的功能,所以在设定网格和烘焙的过程难免会出现很多不便。NavMesh作为unity自带的功能,用法和之前的LightMapping烘焙或者遮挡剔除Occlusion Culling有很多相似之处。& && &这个功能有很多有趣的地方,而且用起来也很方便,我打算分开几篇日志来逐一介绍。这次的目的只是简单的认识一下NavMesh的基本用法,所以暂时不详细的翻译组件每一个参数和功能的意思。& && &先来看看怎么在unity打开NavMesh功能的窗口吧:在window下拉列表中可以看到Navgation,点击:
9786490.jpg (32.23 KB, 下载次数: 4)
09:33 上传
在原来Inspector面板的旁边会出现Navigation的面板:
7303656.jpg (44.35 KB, 下载次数: 4)
09:33 上传
这个Objcet的面板是对应当前选择的物体的,旁边的Bake面板是对应全局选项的。结构和烘焙或者遮挡剔除是一样的。在选择了物体的情况下会出现上面的内容:
上面的All、MeshRenderers、Terranis是对Hirarchy面板里面显示的物品选择的一个筛选过滤:
all就是全部显示
MeshRenderers是只显示可渲染的网格物体
而Terrains当然就是只显示地形物体了。
下面的是重要的选项,第一个Navigation Static选项是选择该物体是否用做寻路功能的一部分。只有勾选了这个选项,下面的其他选项才会可操作。
7918562.jpg (62.43 KB, 下载次数: 3)
09:33 上传
OffMeshLink Generation选项是选择该物体是否根据高度、可跳跃宽带等全局的选项自动生成OffMeshLink,这个会在以后的讲解中详细说明,这次就暂时不讨论。
Navigation Layer是对参与寻路功能的地图物体的一个分类,用层来分类,默认有三个层可以选择,当然也可以自己添加层。
在Edit下拉列表,选择Project——NavMeshLayers
7399192.jpg (60.96 KB, 下载次数: 5)
09:33 上传
出现了NavMesh层的管理界面:
2886952.jpg (37.5 KB, 下载次数: 6)
09:33 上传
上面三个Buit-in Layer是系统默认的三个可选择层,我们可以在下面的User Layer里面输入自己需要的层的名称,比如我现在输入一个叫做“brigde”的层
1259195.jpg (31.45 KB, 下载次数: 5)
09:33 上传
这时候,刚才输入的“bridge”层,就会出现在可选择的列表里面
通过刚才的几步,NavMesh常用的几个面板我们都已经操作过了,接下来可以做一个小例子:
2989002.jpg (40.5 KB, 下载次数: 4)
09:33 上传
在场景里面,我放了一个摄像机(Camera),一个充当地面的面片(plane),一个角色模型(man)和一个目标点物体(target)
为了便于观察目标点的位置,我在目标点物体身上添加了Light组件让它会发光。角色模型(man)身上必须添加NavMesh组件,不然就不能寻路了。为了方便,我使用了官方的大兵模型,里面已经带有了动画和动画控制的脚本。不过这些动画的表现暂时是不重要的,你可以选择放一个胶囊或者Cube代替人物的模型。
0946842.jpg (41.26 KB, 下载次数: 5)
09:33 上传
还记得刚开始介绍的Navigation面板吗?选择地面(plane),在Navigation面板里面里面勾选Navigation Static选项,其他的默认不改动。
然后点击右下角的Bake面板。这时候会有一个计算的过程,曾经用过烘焙或者遮挡剔除的朋友应该对这个过程很熟悉了。
不过和之前两个功能一样,如果你没有保存场景level,unity会提示你先保存,然后再bake。
由于现在场景里面的物体很少,所以Bake的过程很快就结束了。
4213387.jpg (29.77 KB, 下载次数: 6)
09:33 上传
留意看scene视窗,现在地面的颜色已经发生改变了,这是因为unity已经帮你生成了寻路用的NavMesh网格,由于现在没有遮挡的阻碍物,所以整个地面都是属于可以行走的范围。
9080661.jpg (57.68 KB, 下载次数: 3)
09:33 上传
写一个最简单的控制脚本吧,以上是C#,由于很简单,估计用Js的朋友也能对应的写出来。
简单的解释一下,这个脚本是直接拖放到角色(man)身上的,并把场景中的目标物体(target)拖放指定到该脚本的target变量上面进行了赋值。在脚本一开始的时候,我 先获取了man身上的NavMeshAgent脚本组件,然后在Update的过程中,man不断的进行对target的位移的一个寻路并移动到目标位置的操作。
在进行完以上的操作后,你应该已经可以点击unity的播放按钮,然后移动目标物体(target),这时候角色模型已经可以追着目标点跑了。
这里我还做了一个简单的鼠标点击plane设定目标点的功能,由于这个功能不在这次的讨论范围内,所以有兴趣的朋友可以自己去百度一下具体的方法。
1594197.gif (311.22 KB, 下载次数: 4)
09:33 上传
进行到这一步,人物已经跑起来了,但由于没有遮挡的障碍物,所以人物只是会直线的行走,看不出寻路的感觉。接下来我们就做点更复杂的:
5207988.jpg (27.3 KB, 下载次数: 2)
09:33 上传
在场景里面添加一个Cube做为障碍物,具体的形状和位置请根据自己喜欢来调节,阿赵我是把它做成了一个长方形,并摆在了角色面前。
1121581.jpg (41.29 KB, 下载次数: 4)
09:33 上传
和刚才对地面的操作差不多,选择遮挡物Cube,在Navigation面板里面勾选Navigation Static选项,这次的Navigation Layer要选择Not Walkable。顾名思义,这是不能行走的意思,代表了这个Cube是不能通过的。
选择完成后,我们再次点击Bake,又是一个小等待的过程。
Bake完成后,我们回到scene视窗。
0427036.jpg (51.11 KB, 下载次数: 5)
09:33 上传
观察scene视窗,会发现刚才整个地面都是NavMesh的情况已经改变了,在障碍物的周围,NavMesh留出了一个缺口,这代表了角色已经不能从障碍物身上通过了。
再次点击unity的播放按钮
现在可以看到,人物已经可以绕着障碍物走了,我们的目的已经顺利达到了。
& && &这次的例子就到此结束了。
& && &在第二节里,我会详细的讲解高低落差、爬梯子以及跳跃等较为复杂一点的功能。然后会在第三节里面讲解分条件的寻路(不同人走不同的路),以及动态控制道路(如吊桥)等的功能。
unity. 寻路;unity 4.5教程;unity 5知乎 unity入门;unity改变物体的位置;unity 摄像机范围控制;unity 不同场景传值;unity static物体;unity 物体自动移动;unity 给模型添加动画;unity人物 脚本;uniunity获取组件;unity 常用插件;unity 地面处理;unity做地图;unity 动态生成模型;u;unity寻路;unity a*寻路;unity 策略 教程;unity 5.0教程;unity 教程;unity使用教程;unity教程 云;unity连连看教程;unity 教程5.;unity热 教程;unity入门知乎;unity改变物体位置;unity 控制摄像机移动;unity 摄像机控制;unity 场景传值;unity物体的unity中物体自动前进;unity模型添加动画;unity 人物移动 脚本;unity 5unity怎么获取组件;unity都有哪些常用插件;unity里面常用插件;unity常用的插件;unity 地面范围;unity target是什么;unity做小地图;unity如何动态生成模型;unity人物模型;unity 脚本控制动画;unity获取脚本;unity 点击模型;unity 获取点击物体;unity烘焙场景;unity全局变量;unity 寻路插件;unity点寻路插件;unity角色控制与脚本;unity 5 版本控制;unity版本控制;unity inspector 多选;场景渲染unity控制物体移动unity 中让物体发光;unity模型不显示;unity动画能进行位移么;unity位移动画;unity动画位移;unity点击播放;unity战斗系统插件;unity layer
本帖被以下淘专辑推荐:
& |主题: 3, 订阅: 1
每日推荐:
蛮牛相关业务合作(市场合作/项目需求/人才招聘)联系-崇慕 QQ:
71535/5000排名<font color="#FF昨日变化1主题帖子积分
日久生情, 积分 1535, 距离下一级还需 3465 积分
日久生情, 积分 1535, 距离下一级还需 3465 积分
蛮牛币4000
在线时间316 小时
楼主帖子经典呀
每日推荐:
117/50排名<font color="#FF昨日变化2主题帖子积分
注册看看, 积分 17, 距离下一级还需 33 积分
注册看看, 积分 17, 距离下一级还需 33 积分
在线时间3 小时
楼主帖子经典呀
每日推荐:
5779/1000排名<font color="#FF昨日变化主题帖子积分
熟悉之中, 积分 779, 距离下一级还需 221 积分
熟悉之中, 积分 779, 距离下一级还需 221 积分
蛮牛币1646
在线时间347 小时
很给力啊!!!
每日推荐:
72079/5000排名<font color="#FF昨日变化主题帖子积分
日久生情, 积分 2079, 距离下一级还需 2921 积分
日久生情, 积分 2079, 距离下一级还需 2921 积分
蛮牛币4982
在线时间240 小时
每日推荐:
3239/300排名<font color="#FF昨日变化63主题帖子积分
偶尔光临, 积分 239, 距离下一级还需 61 积分
偶尔光临, 积分 239, 距离下一级还需 61 积分
在线时间28 小时
Nice, thanks for sharing
每日推荐:
3236/300排名<font color="#FF昨日变化5主题帖子积分
偶尔光临, 积分 236, 距离下一级还需 64 积分
偶尔光临, 积分 236, 距离下一级还需 64 积分
在线时间120 小时
很好的网站&&很好的集体 很好的楼主 很好的版主 谢谢 辛苦了
每日推荐:
61300/1500排名<font color="#FF昨日变化主题帖子积分
蛮牛粉丝, 积分 1300, 距离下一级还需 200 积分
蛮牛粉丝, 积分 1300, 距离下一级还需 200 积分
蛮牛币2752
在线时间302 小时
Navmesh,这个得学习学习~
每日推荐:
5528/1000排名<font color="#FF昨日变化主题帖子积分
熟悉之中, 积分 528, 距离下一级还需 472 积分
熟悉之中, 积分 528, 距离下一级还需 472 积分
在线时间109 小时
感觉都忘记了,学习学习
每日推荐:
3282/300排名<font color="#FF昨日变化1主题帖子积分
偶尔光临, 积分 282, 距离下一级还需 18 积分
偶尔光临, 积分 282, 距离下一级还需 18 积分
在线时间99 小时
楼主帖子经典& && && && && && && && && && &呀& &&&
每日推荐:
7排名<font color="#FF昨日变化主题帖子积分
蛮牛币2247
在线时间944 小时
这个项目文件能不能共享学习一下
每日推荐:
蛮牛论坛干货区作者
社区QQ达人
使用QQ帐号登录论坛的用户
连续签到30天

我要回帖

更多关于 导航网格 分层寻路 的文章

 

随机推荐