文章目录
- 思维导图
- 寻路场景搭建
- 导航面板
- 动态障碍物(NavMesh Obstacle)
- 分离网格跳跃线(Off-Mesh Link)
- NavMeshComponent
- 预制体内生成导航网格,且网格跟随预制体
- NavMeshLink
思维导图
寻路场景搭建
都是Cube搭建,每个Cube都有盒装碰撞器(为了鼠标检测。)
场景弄好后要进行导航烘焙,生成导航网格,因为导航是根据导航网格实现的
首先要对烘焙的场景勾选为导航静态的,因为只有静态的才能烘焙。
之后添加一个角色,并在角色上添加导航网格代理组件(NavMesh Agent)并编写代码如下图:
导航面板
每次导航代理有修改时都要重新烘焙!!!
当导航代理的半径变小时,可以寻更大的范围,但是如果场景中Cube间有空隙,且空隙大于代理半径时,则会出现问题。
代理寻路能不能走通,可以在烘焙之后看蓝色的路径,蓝色的部分为代理可以走过的地方
坡度是指上下坡,步高则是指走楼梯
成本指导航所需花费的成本,前三个为默认的。寻路时会选择成本最小的走。颜色为不同区域的标识
途中黑色箭头线标识可以直接穿越的,当掉落高度与跳跃距离较小时,这些黑线就会小时(即不能穿越)。且单项箭头只能单项通过
动态障碍物(NavMesh Obstacle)
障碍物加上了导航网格障碍组件,对代理来说,选择右边的路线成本最小,若不勾选切割,如果要到对岸去,代理会在障碍物的右边停下来。若此题勾选切割
,则代理会重新烘焙,然后选择中间的桥到对岸去。
分离网格跳跃线(Off-Mesh Link)
用来对无法直接行走的表面进行导航网格链接,如跳楼,跳沟渠、开门后通过等
先添加网格分离链接的组件如下图
其中StartPosition
和EndPosition
为Transform组件
场景中需要用跳跃线连接的物体,这上面标出的需要勾选上
NavMeshComponent
代理添加NavMeshSurface组件,后面烘焙用这里面的Bake。
右边选择音量后,左边会出现一个立方体,Bake后立方体体内的部分生成导航网格。可以通过拖动其大小,来决定多大的范围生成网格
Render Meshes
是根据是否有渲染器来筛选,Physics Colliders
通过盒装碰撞器筛选
下方代码实现右键新建Cube并重新烘焙网格
预制体内生成导航网格,且网格跟随预制体
将一个预制体拖到场景中后,先将其网格清除,用传统的烘焙方式(导航选项卡->烘焙选项卡->Bake)是没办法生成网格的,可以用NavMeshSurface中的Bake(官方文档介绍的一种方法,若有两个一次都会烘焙,因此一次只烘焙一个)
NavMeshLink
是OffMeshLink的加强版,如下图也有两个点,但与OffMeshLink不同的是,它不需要再在场景中定义这两个点