Unity “Failed to create agent because it is not close enough to the NavMesh“警告 并由此引发的问题

这个报错表示的意思是:NavMeshAgent所在节点未放置在寻路网格上

从最基本的理解上,就是说你的角色,或者某个 agent 没有在导航的地形上,

最关键的是:由此引发的报错:

"SetDestination" can only be called on an active agent that has been placed on a NavMesh.

导致角色无法移动。

我找了很久问题,百度了四五个小时,网上说的很多解决方法,包括不限于:

  1. 由于角色是 由 Instantiate 生成的,所以一开始不在导航网格上,所以需要使用 类似于NavMeshAgent.Warp(transform) 来重新设置位置而不是 transform.position 来初始化位置

  1. 不同角色重叠,障碍物检测异常,只要把 Radius 改成0,或者关闭 Obstacle Avoidance,人物就可以重叠了且移动之类的

  1. 或者是反复激活 角色身上的 Nav Mesh Agent 组件的激活状态 active

  1. 还有些人是基本问题:

1>. 未设置物体的Navgation static标签。

2.> 没有烘焙寻路网格。

3.> 寻路物体本身没有设置导航组件。

这些和我都没有问题,直到我第二天在bing上搜一些国外开发者针对这个问题的答案,

我复制了一些机翻的方法:

1:将地形放到原点0,0,0

2:将脚本放到最上面:一个是将using unityEngineAI放道最上面,一个是将C#脚本放到 NavMeshAgent脚本上试试

3:先激活代理角色身上的 NavMeshAgent脚本,再生成网络本身(这个有待商榷)

4:看下报错到底是距离太远还是距离太近,抬高地形或降低地形

5:代理的比例问题,还是要看一下,场景比例太大了,需要适当调整旋转半径,高度的值

6:有的说代理上的 collider 会有影响 ,试着取消勾选,或者转移到别的地方

说实话全部都没有解决我的,我就是看教程做了个简单导航,

直到我看到一个国外大哥说了一句话:

别忘了检查Agent Type,因为我的Agent中有“New Agent”,将其更改为Humanoid对我有帮助。

就因为我试了一下增加了一个Agent的新代理,且角色用的就是这个新代理,我自己都忘了当时新增了一个代理了,只是看书上说有这么个功能罢了

解决方法:

把代理名字改回 Humanoid

虽然这样会导致只能选择一个代理模式,但是没报错了

我刚学这个,不知道为什么新增不行,那如果我要新增不同的代理模式怎么办。如果有人知道这种情况,麻烦留言一下

猜你喜欢

转载自blog.csdn.net/liyangufo/article/details/129629830