NavMesh是自动寻路系统,我们字游戏中经常会用到,比如控制角色移动的时候,他会绕开障碍物到达你所指定的地点。而这个功能需要我们第一烘培场景,这个需要Navagation,第二给角色添加NavMeshAgent组件,这篇文章我们就介绍下NavMeshAgent组件。
- AgnetSize 这个组件的大小
- Radius 半径 Height 高度,这个组件是有大小的,我们可以根据角色自身来调节半径和高度。
- Base Offset 中心偏移量,这个是根据高度来说的,就是这个组件与角色自身高度中心的便宜。这个大家可以去 试一下。
- Steering 操纵力
- Speed 速度,也可以理解为角色移动最大速度
- Angular Speed 角速度,就是角色转向时的一个角速度,一般我们都把他调到2000以上。
- Stopping Distance 停止距离,我上图填的是2,当我们选中一个目标点以后,该角色移动到距离目标2米时时停下。
- Auto Barking这个是是否自定减速。假如我们没有勾选这个选项时,那么角色就会越过目标点,向前移动一定距离后,再往目标点移动,然后再越过,就是来回在目标点徘徊。
- Obstacle Avoidance
这整个选项是控制优先等级的,低优先级会给高优先级的让路。 - Path Finding 寻找路径
- AutoTraverseOffMeshLi 运行到分离网格的时候,是否自动移动。
- AutoRepath 是否自动重新规划路线,打个比方,我们把目标点放在一个屋子里而门没有开,当角色移动到门口的时候就会停下,如果我们选中的是自动规划路线,那我们在把门打开的时候,角色就会自动进入到屋子里,反之不选的话,即使我们把门打开,角色还是停留在门口不会进去。
- Area Mask物体可以移动的网格区域,mask就是遮罩的意思,这个参数我们在以后会讲。
接来下我们大致讲解下Navagation
首先通过window菜单栏才选中Navagation打开
(小技巧:有的时候我们在Scene视图中看不到这个烘焙过的网格界面,但是我们点了Navation面板以后就能看到了)
-
Agent Radius 这个数值表示距离障碍物多远的距离不会被烘培到可行走的网格里
比如上图中红箭头指示的两个区域,从地面来讲,桥的两边我们到达的,从桥面来讲,桥的两边我们也是不能到达的。(个人理解)
- Agent Height 还是以桥为例子,假如桥洞的有些区域的高度大于该高度,那么这些区域就是可行走的。看下图
- Max Slope 最大坡度,跟上边两个的理解一样。可行走的最大高度
- Step Height 如果一个物体的高度大于该值,那么角色将不能行走上去。这个值要比 Agent Height 这个值要小,如果大于 Agent Height ,那系统就会进行截断,把该值设为 Agent Height 的值。(这个我们还是以上图的桥为例,假如StepHeight值为3,AgentHeight为2,那么导航网格会把两个都烘培成可以走的区域,能从地面直接走到桥上,也能从直接桥下通过,这样可能就会出问题,这是我的个人理解),下图物体的高度大于StepHeight。
- Generated Off Mesh Links 这个是意思分离分离网格之间的连接,假如按照上边的一些参数,我们会有一些区域变得到达不了,而通过下边的两个参数我们就可以建立一个连接。
首先我们先选中一个物体,然后把Navigation下的选到Object
把箭头1指向的Generate OffMeshLimks勾选上,而箭头2指向的NavigationArea这就是你希望把该区域烘焙成什么类型的区域,而NavigationStatic这个就代表是静态的,在游戏中是不能移动的。同时当我们在烘焙的时候就会把他的一些网格信息存储起来,然后在计算最短路径的时候会把这个考虑进去,假如我们不勾选,则当角色移动到该物体,与该物体发生碰撞的时候才会考虑这个物体,只有我们把这个勾选上才可以去选择下边两个选项,否则选择不了。
接下来我们继续回到Bake界面
- Drop Height 可以从高处跳到地面的最高高度
这个只能从上往下跳跃,假如我们想从下往上跳跃,我们只能使用手动网格连接
- Jump Distance 可以跳的最远距离
手动添加分离网格连接
首先创建一个Cube,然后添加上OffMeshLish组件
- Start 和 End表示起点和终点
- CostOverride表示需要的行动力
- BiDirrection 勾选时表示双向,不够选时表示单项(从Start到End)
- Activated 表示该链接是否是激活的
设置完以后我们就发现这两个物体之间有一条线在连接,而且箭头是双指向的。
补充:关于NavMesh常用API
destination:NavMeshAgent的目的地
remainDistance;距离目的地剩下的距离
Resume()重新规划路径
Stop()停止
SetDestination()设置目标点
Warp()让NavMeshAgent瞬移到该点
注意
当我们每次要对导航网格修改时,每次修改以后一定要点一下Bake这个按钮,然后他才会自动烘培。
还有一个小技巧,当我们想把某个新建物体烘培到场景里边里边时
可以直接通过这个标签来进行设置,比较快捷。