Unity 使用 Runtime NavMesh(运行时导航),实现AI在场景变化时,重新计算路线

5 篇文章 0 订阅

Unity Runtime NavMesh(运行时导航)实际应用,实现AI在场景变化时,重新计算路线。

*要求版本5.6以上。

使用插件:NavMeshComponents
上一篇Runtime NavMesh的介绍: Unity Runtime NavMesh(运行时导航)总结,实现AI可以导航到墙壁(天花板)上

  使用运行时导航可以是AI在场景变化时做出相应变化。这里没有使用上一篇文章说的四个组件,而是使用了其样例的两个脚本实现。
  具体实现只需要导入两个插件的样例脚本,并在场景中清除原来存在的导航烘培(传统编辑时烘培),划分烘培区域(一个脚本),给所有障碍物添加障碍标记(另一个脚本),详细见下方。


具体实现

从样例中导入两个脚本。

添加 LocalNavMeshBuilder 脚本。(默认烘培的是Agent 0(第一个AgentType),具体可见代码)


- Tracked 是这个烘培区域的中心点。不赋值的话在启动时会自动赋值为自己的对象。
- Size 是区域大小,下图绿边方体。

为所有障碍(建筑、石头、树木等)添加标记(NavMeshSourceTag 脚本)。

需要注意的是,这些都需要运行时烘培,所以需要取消掉Batching Static。


与传统编辑时烘培导航的区别

性能上。没有太大区别,见下图。

  • 编辑时烘培

  • 运行时烘培,其中的协程就是更新场景信息(实时导航)

功能上。肯定是实时好啦。

  • 编辑时烘培
      当出现新的障碍时(下图四个坦克残骸,带Nav Mesh Obstacle组件),AI的导航路线不会变。出现下图情况,两个坦克可以看见对方,但是卡住了,双方都打不到对方。

  • 运行时烘培
      在障碍(带NavMeshSourceTag组件)的Transform有所变化时,场景导航会重新烘培计算。下图中,在障碍变化时,导航也在重新烘培,两个坦克会绕路继续干。

配置上。

  • 编辑时烘培
      在编辑时一次性烘培,自由度低。

  • 运行时烘培。
      自由度高,可以选定物体是否加入烘培、选定代理模型等,就是如果障碍物比较多的时候需要逐个添加标记。

更多运行时优势可以见上一篇文章。


  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值