Unity3d自带寻路Navmesh三大组件
来源:互联网 发布:centos系统还原 编辑:程序博客网 时间:2024/05/18 00:58
1.Nav Mesh Agent:主要挂在寻路物体上
2.Off Mesh Link:实现区域转移功能(例如,有时不一定只是在地面上进行寻路,可能有些高高的平台,平台与地面是不相连的,使用该组件可以跳到平台上)(需要两个对象,一个开始一个结束,表示连接两个地的对象)
3.Nav Mesh Obstacle:主要挂在障碍物上
4、Window/Navigation,弹出Navigation视图,点击右下角的Bake按钮生成导航网格
5、
如果希望上升过程丰富一些,比如播放一个爬梯或者飞行的动作,那么完全可以通过脚本来自行控制。
首先需要放弃勾选行进物体Nav Mesh Agent组件下的Auto Traverse Off Mesh Link选项,然后编写相应脚本来实现移动过程。在脚本中通过访问NavMeshAgent.isOnOffMeshLink成员来判断是否到达起点或终点,如果到达则访问NavMeshAgent.currentOffMeshLinkData成员来取得起点和终点的信息,最后实现自己的移动过程。完成移动后需要调用NavMeshAgent.CompleteOffMeshLink()来结束手动过渡过程
6、在Navigation视图下的Layers标签页可以设置层,Object标签页可以为物体指定层,Nav Mesh Agent组件的NavMesh Walkable可以指定可行走的层
7、
4.动态更改可行进层
关于walkableMask:
Built-in Layer 0 对应的 walkableMask 为1
Built-in Layer 1 对应的 walkableMask 为2
这几个属性我简单的解释一下:
Radius:导航代理的半径,我们可以适当的调节一下这个值
Speed :这个属性代表这个导航网格代理寻路时可以达到的最大速率
Acceleration :加速度,表示代理的速度从0加速到Speed时的最大的加速度
Angular Speed :最高的角速度
Stopping distance : 制动距离,当代理据目的地的距离小于这个值时开始减速
Auto Traverse OffMesh Link :自动移动并关闭OffMeshLinks,这个选项对于我们利用程序来操纵后面我要介绍的OffMeshLink很关键,
Auto Repath 自动重新寻路,如果发现现有路径已失效,那么它将获得新的路径,这个选项我们一般将其勾选上
Height : 导航代理的高度。
Base Offset : 基本偏移,我们可以通过调整这个变量来调整代理自身的包围盒
Obstacle Avoidace Type : 代理躲避的水平,一般我们选默认的High Quality就行了
NavMesh Walkable :导航网格代理可以通过的网格层类型
好了这些属性我们基本上知道了一点,但要真正理解它,我们还有很长的路要走。我们到头来是要用脚本来控制寻路的,也就是说我们必须掌握NavMeshAgent这个类,还是老办法,看文档吧,记住,文档我们必须看,这是我们学习新东西必须做的,那些出视频,出书的没一个不是从看文档开始的。
我们看NavMeshAgent这个类,Unity菜单:help->Scripting Reference 。我们找到这个类,发现里面的变量和方法还不少呢。这次我不可能将其全部讲解到 , 因为有些我自己都没用过,所以我只讲解我们常用的:
NavMeshAgent(导航网格代理组件所对应的类)
假使我们的主角身上添加了一个导航网格组件,我们一般在脚本中这样定义NavMeshAgent类型的成员变量:
private NavMeshAgent nma ;
并在Start或Awake函数中实例化它:
nma = gameObject.GetComponent<NavMeshAgent>();
重要变量:
1.destination
我们可以这样对导航网格代理设置目的地:
nma.destination = Vector3类型的值。相当于nma.SetDestination( Vector3类型的值 )
2.stoppingDistance
这个与Inspector面板中的Stopping Distance对应,一下再不涉及与Inspector面板中的属性对应的变量
3.velocity
导航网格代理周游时的实时速度,非常重要
4.nextPosion
顾名思义,也就是下一个位置,在Update函数中打印这个属性,你会发现打印出的结果与这个导航网格代理周游过的路径一致
5.steeringTarget(只读)
这个属性是相当重要的,它指的是导航网格代理在导航网格中周游时所经过的拐点,这对于制作寻路网游同步角色的Transform是相当重要的,因为导航网格的寻路路线是直线,我们只需将其寻路的拐点与旋转角度告诉给服务器端,有服务器端广播出去,然后再写一个执行Transform同步的脚本(是特制的)绑定在非角色玩家身上就可以了。
6.desiredVelocity(只读)
这个属性说实话我用的不多,指的是导航网格代理的期望速度,与其当前速度不是等价的。
7.remainingDistance( 只读 )
导航网格代理离目的地还剩的距离,如果其值为0,那么代理已经到达了目的地了,所以我们可一个这样判断一个导航网格代理是否到达了目的地:
if( nma.remainingDistance == 0 ){
//执行行为
}
8.isOnOffMeshLink
导航网格代理当前的位置是否位于OffMeshLink,因为这个牵扯到了另一个组件,我会在后面说的
重要方法:
1.SetDestination( Vector3 v )
设置目的地,与nma.destination = v一样的,你想怎么用都行,只是这个函数在设置目的地成功后返回***e,否则返回false,就只比调用属性多了一个返回值
2.ActivateCurrentOffMeshLink( bool activated )
返回值为空
与OffMeshLink有关,当activated为***e激活OffMeshLink,后面会讲到的
3.CompleteOffMeshLink ()
让导航网格代理完成在OffMeshLink上的周游,后面会讲的
4.Move( Vector3 v )
让导航网格代理朝向量v的世界坐标系方向平移v的长度
5.Stop()
让导航网格代理停止寻路,但此寻路状态可以靠下面一个函数恢复到寻路状态,并且目的地也与上次一样
6.Resume()
恢复寻路状态,此时角色会在上一次执行了Stop函数停下来后恢复当时的状态,目的地为上一次的目的地
- Unity3d自带寻路Navmesh三大组件
- Unity教程之-Unity3d自带寻路Navmesh
- unity自带寻路Navmesh入门教程(三)
- unity自带寻路Navmesh入门教程(三)
- Unity自带寻路Navmesh入门教程(三)
- unity自带寻路Navmesh入门教程(三)
- unity自带寻路Navmesh入门教程(三)
- unity自带寻路Navmesh入门教程(三)
- unity自带寻路Navmesh入门教程(三)
- unity自带寻路Navmesh入门教程(三)
- Unity自带寻路Navmesh入门教程(三)
- unity手游开发--Navmesh自带寻路组件使用注意事项
- unity自带寻路Navmesh
- Unity3d 寻路组件NavMesh Agent
- Unity3d 寻路组件NavMesh Agent
- unity自带寻路Navmesh入门教程
- unity自带寻路Navmesh入门教程
- unity自带寻路Navmesh入门教程
- poj3254 Corn Fields (状压dp)
- 结构化随机森林源码分析
- 莫比乌斯反演入门 HDOJ 1695:GCD 、BZOJ 2301: [HAOI2011]Problem b
- 12.Which is the correct description of a pinned buffer in the database buffer cache?
- [javascript权威指南][阅读笔记]五
- Unity3d自带寻路Navmesh三大组件
- HashMap与Hashtable(二)
- 对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是( )
- 天梯赛 L2-011. 玩转二叉树(数据结构)
- jzoj 1569. 【普及模拟】公共子串 解题报告
- Windows 无法自动将 IP 协议堆栈绑定到网络适配器
- 【前端开发】HTML标签总结-行标签和块标签
- iOS开发-使用AVAudioPlayer实现音乐播放器
- sublimeText 快捷键