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
- Unity 使用 Runtime NavMesh(运行时导航),实现AI在场景变化时,重新计算路线
- Unity Runtime NavMesh(运行时导航)总结,实现AI可以导航到墙壁(天花板)上
- Handling Runtime Changes(处理运行时变化)
- 处理运行时系统设置变化(Handling Runtime Changes)
- OC的runtime(运行时)运行机制及应用场景
- runtime运行时应用场景-method swizzling
- unity在加载场景时传递参数
- [笔记][unity]Runtime(运行时)将Texture转到Sprite
- Unity:Navmesh
- Unity Navmesh
- Unity-NavMesh
- iOS 运行时(runtime)
- Unity 用户手册用户指南导航网格 (Navmesh) 和寻路 (Pathfinding)
- unity中NavMesh组件及使用介绍
- Unity中实现在切换场景时控制音乐的同步播放
- Runtime使用场景
- Runtime 使用场景
- Runtime系列(二)--Runtime的使用场景
- spring声明式事务源码剖析(中)
- 解决IE浏览器下document click事件失效问题
- Java NIO系列教程(6):Selector
- 剑指offer(23)—二叉搜索树的后序遍历序列
- 【学习笔记】jQuery的实现原理
- Unity 使用 Runtime NavMesh(运行时导航),实现AI在场景变化时,重新计算路线
- POJ1273-Drainage Ditches
- 一个想法照进现实-《IT连》创业项目:聊聊最近两三事
- 对于ORACLE RAC集群修改MAX_STRING_SIZE的方法(varchar2字段扩展到32K)
- cocos-js,Widget的addTouchEventListener改善
- 10个有关RESTful API良好设计的最佳实践
- 升级Glibc2.14的坑爹记录
- cmd下javac 错误: 编码GBK的不可映射字符
- sku组合查询算法探讨-之JS实现示例