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组件.然后新建一个脚本挂载上.

cs 复制代码
    public NavMeshAgent navMeshAgent;

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

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

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

其他问题:

运行时烘焙

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

cs 复制代码
	public NavMeshSurface Surface2D;

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

已知问题

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

cs 复制代码
   satic float agentDrift = 0.0001f; // minimal
   void 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);
    }

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

相关推荐
魔士于安3 天前
unity 丑陋哥布林 哥布林有humannoid 动画没 带动画
unity·游戏引擎·材质·贴图·模型
JQweryuiop3 天前
中小型游戏陪练工作室数字化管理实践:基于七彩屋电竞护航小程序订单、履约与绩效系统的落地复盘
大数据·游戏·小程序·架构
小贺儿开发4 天前
Unity 家居视频遥控(细节优化)
科技·unity·程序员·udp·视频·工具·通信
淡海水4 天前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
乌萨达4 天前
低配电脑玩手游怎么设置?4GB、8GB内存与模拟器选择指南
游戏·电脑·安卓模拟器·雷电模拟器
小小数媒成员4 天前
UGUI 性能优化(详细,全,深入)
开发语言·unity·游戏引擎
林川~015 天前
Unity新输入系统使用笔记
unity·input system
小贺儿开发5 天前
Unity 结合百度AI开放平台 手写文字识别
人工智能·科技·学习·unity·云服务·文字识别·手写文字
林川~016 天前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
yi碗汤园6 天前
MQTT消息队列遥测传输协议
网络·网络协议·unity