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

5 篇文章 0 订阅
3 篇文章 0 订阅

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 等。)

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值