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; // 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);
    }

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Cocos2d是一个开源的游戏开发框架,它提供了许多功能和工具,方便开发者创建各种类型的游戏。在Cocos2d中,寻路是一项非常重要的功能,它可以让游戏中的角色智能地移动,避开障碍物并找到最短路径。 Cocos2d中的寻路算法通常使用A*算法来实现。A*算法是一种启发式搜索算法,它能够在不完全了解搜索空间的情况下,找到最优解。A*算法通过评估每个格子的代价函数,实现对路径的评估和选择。在寻路过程中,起点和终点被认为是特殊的格子,然后检索周围的格子,计算每个格子的代价函数,选择代价函数最低的格子进行移动。通过反复迭代这个过程,直到找到终点。 Cocos2d中的寻路功能通常通过一个名为TileMap的类来实现。TileMap类是一个由网格组成的地图,每个网格表示一个可走或不可走的区域。在TileMap中,我们可以定义障碍物或者地形的属性,然后使用寻路算法来计算最短路径。 在使用Cocos2d进行寻路的过程中,需要注意以下几点: 1. 准备好地图数据,并将其导入到TileMap中。 2. 配置TileMap的节点类和代价函数,以便正确评估路径。 3. 使用A*算法来计算路径,获取寻路结果。 4. 将寻路结果应用于游戏角色的移动。 总之,Cocos2d中的寻路功能提供了方便的工具和算法,帮助开发者实现游戏角色的智能移动。通过合理使用寻路功能,游戏可以更加真实和有趣。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值