Unity NavMesh导航

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gohuge/article/details/80685426
回顾一下,之前都遇到些什么问题:
一、问题
1、给对象添加NavMeshAgent组件后,单独设置对象的position总是不对!
原因:后面发现要采用agent.Warp 来设置位置
2、NavMeshAgent的移动速度偏慢,明明Speed调的很高了还是慢,且停止的时候刹车刹不住,还要往前面走一段距离!
原因:acceleration加速度设置问题,加速度低了
3、需要静止不动的场景对象如箱子,会被撞开或撞歪了方向!
原因:通过Rigidbody-Freeze将Position的Y轴冻结,Rotation所有方向冻结
4、再次选中地图通过Navigation生成路径,有些格子还是没有路径!
原因:没有路径的格子没有勾选static选项
5、场景点击地表不够寻路反应不够灵敏!
原因:地表上还有其他元素,将他们的layer设置为IgnoreRaycast

6、在有多个scene的情况下他们的Navigation会同时生效
考虑:采用新版的NavMesh解决,相关使用方式和插件于
7、设置NavMesh障碍物,可直接给物体增加Nav Mesh Obstacle 控件
二、自动修路实现
1、NavMeshSourceTag(标记地表元素)
作为地图的可寻路介质,需要一个标记才能将其找出来,就行原始Navgation需要标记static;
该脚本主要是将物体网格放在一个静态容器,物体销毁的时候也需要从该容器销毁;
2、LocalNavMeshBuilder(修路建筑工人)
建筑工人需要知道路要从哪点开始修,修多大,然后确定对应范围内的地表,并实时构建路径;
由于建筑工在不停的修路,所以道路改变(搭桥)后路径也会立刻更新
3、NavMeshLink(网格链接)
业务中避免不了跳过水池,越过刀山火海,此时网格和另外的网格路径之间需要一个链接者Link;
当然这些东西也需要一个地方那装,NavMeshPrefabInstance就负责将所有的链接网格放进去,进行处理。
不过这个移动会有单独的AgentLinkMover 来执行。


猜你喜欢

转载自blog.csdn.net/gohuge/article/details/80685426
今日推荐