这个报错表示的意思是:NavMeshAgent所在节点未放置在寻路网格上
从最基本的理解上,就是说你的角色,或者某个 agent 没有在导航的地形上,
最关键的是:由此引发的报错:
"SetDestination" can only be called on an active agent that has been placed on a NavMesh.
导致角色无法移动。
我找了很久问题,百度了四五个小时,网上说的很多解决方法,包括不限于:
由于角色是 由 Instantiate 生成的,所以一开始不在导航网格上,所以需要使用 类似于NavMeshAgent.Warp(transform) 来重新设置位置而不是 transform.position 来初始化位置
不同角色重叠,障碍物检测异常,只要把 Radius 改成0,或者关闭 Obstacle Avoidance,人物就可以重叠了且移动之类的
或者是反复激活 角色身上的 Nav Mesh Agent 组件的激活状态 active
还有些人是基本问题:
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
虽然这样会导致只能选择一个代理模式,但是没报错了
我刚学这个,不知道为什么新增不行,那如果我要新增不同的代理模式怎么办。如果有人知道这种情况,麻烦留言一下