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

来源:互联网 发布:ssh建立连接的端口号 编辑:程序博客网 时间:2024/06/05 18:11

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有所变化时,场景导航会重新烘培计算。下图中,在障碍变化时,导航也在重新烘培,两个坦克会绕路继续干。

配置上。

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

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

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


阅读全文
0 0
原创粉丝点击