U3D寻路导航网格

版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/blues1021。 https://blog.csdn.net/Blues1021/article/details/78162127
需要寻路导航的物体增加导航组件,场景中的物件(地块)设置为带有一定路径信息(联通障碍等)的网格,设置寻路物体的目标点,寻路物体会在地图场景中根据网格路径信息找到最短的路径到达目标点。
使用导航网格寻路的步骤:
1)创建地图场景的游戏对象标记为 navigation static类型,以参与导航网格的烘培
对场景中的起始点物体添加navigation-> Off Mesh Link组件 可以设置起始点物体和结束点物体
进行烘培,那么寻路会先到达目标点,然后到达结束点,则对两个不同的网格之间建立寻路链路。
可以修改物体的层级进行寻路的开关。
也可以为物体增加 Nav Mesh Obstacle组件,通过脚本获取该组件设置enable的true false来设置是否障碍,是否能够寻路通过,使用障碍时候寻路物体会一直运动试图通过障碍物,可以修改运动动画使得暂停。

2) 设置场景中navigation窗口的object,bake,layers参数。烘培寻路设置参数,其实是生成地图数据
更多的寻路参数和注意事项:
object中选中 navigation static那么参与烘培。
选中所有地图静态数据选择OffMeshLink Generation复选框(用关系线来连接跳跃和下落),设置Bake中drop height参数为1则可以让寻路物体跳下一定高度的坡。设置bake中的height参数为0.2则可以钻过坡底或隧道。
object设置navigation layer设置层级,该层级定义了默认可行走,不可行走,跳跃,桥层级。可以在导航窗口中layer页签定义自己的导航层级。

Bake选项卡,设置烘培可行走物体的行走坡度,台阶高度,最大跳跃高度,下落距离,地图网格的最大宽度误差,高度误差,具有代表性的物体的半径和高度。

Layers选项卡,设置导航网格的层名称,在Object页签中可以使用该层级标记物体。
使用层可以保证那些物体可以过桥,那些物体可以在水面上或陆地上移动。
可以通过脚本控制物体所属的层级,让物体在某些机关触发后可以寻路通过。
桥未出现时候:movable.GetComponent<NavMeshAgent>().walkableMask &= ~0x8;
当桥出现则:movable.GetComponent<NavMeshAgent>().walkableMask |= 0x8;

3)创建寻路物体,给它 添加Nav Mesh Agent组件,为该寻路物体增加脚本:
public Transform TargetObject = null;
void Start () {
if (TargetObject != null)
GetComponent<NavMeshAgent>().destination = TargetObject.position;
}
nav mesh agent:
寻路物体的半径,物体行进最大距离,行进加速度,转向时候的角速度,距离目标点多远停止寻路,中断是否重新寻路,躲避等级越高消耗越多性能,该物体可进行的网格掩码层。

4) 创建寻路目标gameobject,将该对象拖拽到寻路物体的脚本上对应的TargetObject 参数(3步骤中)上。
这样启动游戏,那么寻路物体,就会在场景中寻找最短路径,移动到寻路目标物体中。

猜你喜欢

转载自blog.csdn.net/Blues1021/article/details/78162127