当前位置: 首页 > news >正文

NavMeshPlus 2D寻路插件

插件地址:h8man/NavMeshPlus: Unity NavMesh 2D Pathfinding (github.com)

我对Unity官方是深恶痛觉,一个2D寻路至今都没想解决,这破引擎早点倒闭算了.

这插件是githun的开源项目,我本身是有写jps寻路的,但是无法解决多个单位互相阻挡的问题(可以解决但是有性能问题).

1.导入插件

 

2.建立"NavMesh"空物体,添加Navigation Surface,Navigation CollectSources2d组件,点击"Rotate Surface to XY",切换到面向摄像机

 

3.在TileMap的碰撞层加入NavMeshModifier组件,勾选OverrideArea,选择NotWalkable.这代表是不可行走.

4.在TileMap的地面层,加入NavMeshModifier组件,勾选OverrideArea,选择Walkable.这代表是可行走.(和上面差别就是选择不同)

 

5.在NavMesh物体,选择Navigation Surface,根据需求调整Layers层级,UseGeometry,有根据 图片渲染,和根据Colliders渲染,根据自己需求调整,我的TileMap碰撞有修改,所有选择物理碰撞生成,点击"Bake"烘培行走路径.

烘培以后地图是这个样子

 

 

 6.新建一个单位,添加Nav Mesh Agent组件.然后新建一个脚本挂载上.

    public NavMeshAgent navMeshAgent;private void Start(){navMeshAgent.updateUpAxis = false;navMeshAgent.updateRotation = false;navMeshAgent.SetDestination(new Vector3(5, 5));}

以上脚本是锁住旋转和Z轴,然后给定目标点.

如果需要持续追踪目标点,可以使用目标单位的Tansfrom的坐标位置传入

其他问题:

运行时烘焙

通常游戏具有程序化的世界构建,需要在运行时烘焙 NavMesh。要实现此目的,您需要在组件中调用单个方法,以便在运行时以 Unity 异步方式烘焙 NavMesh。可以在方法上调用此方法。BuildNavMeshAsyncNavigationSurfaceStart()

	public NavMeshSurface Surface2D;void Start(){Surface2D.BuildNavMeshAsync();}

已知问题

代理在 Y 轴上移动或设置代理时卡住。如果 x=0_,Velocity 不会做任何事情 - 这似乎是 NavMeshAgent 组件中的一个错误。目前没有可用的修复程序,但有解决方法。解决方法的想法很简单,调整 X 上的代理移动,使其永远不会直线上升。 导航网格可以有一个小的倾斜89.98,以使代理工作。 如果由于某种原因它不能解决问题,则需要添加漂移。

   satic float agentDrift = 0.0001f; // minimalvoid SetDestination(GameObject target){   if(Mathf.abs(transform.position.x - target.transform.position.x) < agentDrift)var driftPos = target.transform.position + new Vector3(agentDrift, 0f, 0f);agent.SetDestination(driftPos);}

这是官方给出来的解决办法..

http://www.lryc.cn/news/124586.html

相关文章:

  • 【03】基础知识:typescript中的函数
  • ssm社区文化宣传网站源码和论文
  • Go语言工程实践之测试与Gin项目实践
  • 排查docker无法启动问题
  • [C++ 网络协议] 套接字和地址族、数据序列
  • AI 绘画Stable Diffusion 研究(八)sd采样方法详解
  • 线程池满了如何处理
  • Java多线程编程中的线程间通信
  • write javaBean error, fastjson version 1.2.76
  • Tomcat的部署及优化(多实例和动静分离)
  • 品牌推广革新之道:海外网红与内容营销的融合
  • 【 BERTopic应用 02/3】 分析卡塔尔世界杯推特数据
  • TypeScript教程(三)变量声明
  • 【数据结构】堆的实现,堆排序以及TOP-K问题
  • 释放马氏距离的力量:用 Python 探索多元数据分析
  • 【不限于联想Y9000P电脑关盖再打开时黑屏的解决办法】
  • 策略模式实战应用
  • JAVA集合-Map
  • 利用Simulink Test进行模型单元测试 - 1
  • 深入探讨代理技术:保障网络安全与高效爬虫
  • HDMI接口的PCB布局布线要求
  • Linux tar包安装 Prometheus 和 Grafana(知识点:systemd Unit/重定向)
  • 【Vue框架】用户和请求
  • NGINX组件(rewrite)
  • 网页显示摄像头数据的方法---基于web video server
  • SIFT 算法 | 如何在 Python 中使用 SIFT 进行图像匹配
  • K8S系列四:服务管理
  • 冠达管理:融券卖出交易规则?
  • 图像变形之移动最小二乘算法(MLS)
  • 搭建一个功能齐全的网站