我在使用Unity NavMesh的时候遇到过同样的问题。在你的代码中,每次生成随机向量后,你都是直接将该向量传入NavMeshAgent的CalculatePath方法里。这个方法会沿着该向量来计算路径,如果该向量不在某个方向上的话,方法会返回一个空路径。

如果 NavMeshAgent 的防止敌人的位置不在 NavMesh 上的路径时会返回 PathInvalid,这有可能导致计算的位置不在 NavMesh 的某些方向上的情况。

考虑到你的问题可能是与使用 NavMeshPathStatus.PathValid 而不是 NavMeshPathStatus.PathComplete 有关。PathValid 表示计算的路径是有效的,而不是全部的坐标都必须正确,这可能解释了为何会只走一半的区域。

这也可能与你没有正确设置敌人的 NavMeshAgent 有关。在 NavMesh 构造的区域中配置 NavMeshAgent 来移动 NavMeshAgent 时需要注意。例如,NavMeshAgent 可以使用 NavMeshDataLayer 来限制它移动的区域。