Unity Runtime NavMesh(运行时导航)总结,实现AI可以导航到墙壁(天花板)上

来源:互联网 发布:结构有限元分析软件 编辑:程序博客网 时间:2024/04/28 18:20

Unity Runtime NavMesh(运行时导航)总结,实现AI可以导航到墙壁(天花板)上。

*要求版本5.6以上。

官方教程:Live Session: Runtime NavMesh Generation
使用插件:NavMeshComponents
实时导航另一个实例:Unity 使用 Runtime NavMesh(运行时导航)实现AI在场景变化时,重新计算路线

  在5.6版本之前,Unity自带的导航烘培场景需要在编辑时烘培(非运行时)。在5.6及其以后版本就可以实现运行时烘培场景,实现实时导航。而且同时可以使用多种导航代理模型(Agent。即不同宽高会有不同的烘培场景。)


机器人从墙面导航到天花板上。

这里写图片描述
编辑时场景。未烘培,游戏开始时,调用NavMeshSurface.BuildNavMesh() 来烘培场景。


主要的四个组件

组件名 作用 NavMeshSurface 导航面。用来烘培场景。 NavMeshLink 导航面连接。Off Mesh Link加强版,连接两个可导航面。 NavMeshModifier 导航更改。就是可以修改部分特殊的导航物体。(是否可以在其上面导航,指定物体可以导航等。) NavMeshModifierVolume 同上。不过是指定一个区域。

变量名 作用 Agent Type 导航代理类型(不同宽高、移动旋转速度、爬坡角度),在Navigation窗口设置。 Collect Objects 从哪些物体上烘培导航场景。下面详解。 Include Layers 包含哪些的层级。 Use Geometry 使用哪种网格来烘培场景。1.Render Meshs:有MeshRenderer组件的。2.Physics Colliders:有物理Collider组件的。

  点击Bake烘培场景。如果要运行时烘培场景,调用其方法:BuildNavMesh()。更新烘培场景:UpdateNavMesh(NavMeshData data)。

Collect Objects

1. All

  场景中有所物体都会拿来烘培,不管物体在哪里,在哪个层级。如下图。一个外部立方体上面是可以导航的。

2. Children

  只有自己及其子层级的物体才会加入烘培。如下图,立方体不是自己的孩子时。

3. Volume

  指定区域内才会烘培(不管是不是自己的孩子)。如下图,区域内切割了立方体。



  通过两点连接两个面(控制Width可以形成类似桥面的连接面)。这两个面都必须可以导航得到(淡蓝色表面),连接成功会预览得到白色的桥面。


(地面和墙面连接,导航就可以从地面导航到墙面了)



(对应下图右桥)
- Ignore From Build : 烘培时是否无视他(不加入烘培)。
- Override Area : 重写该区域(是否可以走,是否要跳过)。
- Affected Agents :这些设置影响到的导航代理。


(对应下图左桥)
同上,只是改变区域内物体。


(烘培后,右边的桥被无视,左边有一块区域不能走。)


*在导航到无法到达的地方时候,像教程中的循环墙面,可能会有BUG:点每个墙面上房间的墙面时,导航是错误的(结果不是导航到房间墙面旁边,而是垂直房间墙面最近的地面的点)。

建议下载插件源码(标题处链接)看样例,有更清楚的实时导航,其中用NavMeshSourceTag组件标记一个物体就可以实现实时产生可导航的物体表面(当然还要配合其他组件如:Local Nav Mesh Builder 等。)

阅读全文
0 0