这个报错表示NavMeshAgent所在节点未放置在寻路网格上。出现这个错误一般伴有

"Failed to create agent because it is not close enough to the NavMesh"类似警告。

表明寻路代理创建失败,后续设置目的地肯定就会导致失败。

出现此类问题需要检查:

  1. 在调用SetDestination的时候,NavMeshAgent是否启用
  2. NavMeshSurface是否存在

如果所有都设置正确,但是还是报这个错误。恭喜你,跟我遇到了相同的问题~

这个报错我在Editor与测试APK总都没有遇到过(如果遇到肯定早想办法解决了~),等项目上线了,发现bugly上报非常多这个报错。让我非常费解,幸运的是我找了NavMeshAgent的源码,才找到了一个稍微安全一点避免错误的方式。

Agent寻路中一个比较重要的功能是避障功能,Unity采用了一个叫群组绕行管理器(Detour Crowd Manager)来管理Agent。当我们可以调用SetDestination的前提就是我们的Agent被添加到了这个绕行管理器中。以下有几种方式会触发添加行为:

  1. NavMeshSurface变更,比如的Obstacle挖孔就会触发这个行为
  2. NavMeshAgent::OnEnable的时候会尝试去添加
  3. 调用NavMeshAgent::Warp会去添加

第一种触发行为需要修改寻路网格,第二种是由系统调用,最后这个可以由我们自己主动触发。

这里你可以检查一下你设置你Agent所在transform是直接使用transform.position吗?

如果是,那就好办,将transform.position来修改坐标的方式替代为使用agent.Warp来修改。

这样,在添加进绕路系统的同时,也会修改transform的坐标。

至于为什么会出现这种情况,我猜想是首次添加Detour Crowd的时候没有成功,失败的原因也很多,因为无法去debug,只能有这种猜想。后续由于没有再次触发这种添加行为导致的出错。不过至少,直接使用Warp设置坐标,可以保证不出错误。

Unity寻路报错“SetDestination“ can only be called on an active agent that has been placed on a NavMesh.相关推荐

  1. 导航报错SetDestination() can only be called on an active agent that has been placed on a NavMesh

    原因:初始化导航组件 NavMeshAgent 的时候,agent 离navmesh太远.isOnNavMesh属性为false: 解决办法: 在初始化预制体的时候,传入诞生点位置和旋转信息. Gam ...

  2. Unity NavMesh导航报错“SetDestination“ can only be called on an active agent that has been placed on a Na

    在使用NavMeshAgent进行导航的时候,发现调用SetDestination一直报错,报错显示是: "SetDestination" can only be called o ...

  3. 修复Unity空白报错问题

    修复Unity空白报错问题 在升级Unity Hub之后,偶然发现Console里有几行空白的报错,看不到任何信息,由于有报错,导致修改代码无法生效.尝试重启项目,重装Unity都完全没效果.而且就算 ...

  4. unity打包报错,又是血压升高的一天

    unity打包遇到的报错,部分在androidstudio里同样方式解决 首先说一个还没搞明白的问题.项目之前打包一直使用的Internal模式,一直没有问题,在没动过所有与sdk有关的文件(包括架包 ...

  5. 用谷歌浏览器打开本地unity webgl报错

    问题描述 unity打包webgl,双击index.html,用谷歌浏览器打开,报错: Failed to download file Build/Test4_Build_WebGL.framewor ...

  6. Unity 3D | 报错:UnassignedReferenceException: The variable “***” of “***” has not been assigned.

    简介 最近开始学习unity3D建模,在Unity 3D脚本应用实例演示(三个实例)上学习了一个案例设计,C# 程序如下: using UnityEngine; using System.Collec ...

  7. Unity 3D 报错:UnassignedReferenceException: The variable *** of *** has not been assigned.

    "某变量未被赋值" 在已知给目前的组件添加好正确的prefab/正确的C#脚本后,仍出现这样的报错. 检查一下是否有"未启用的不完善的脚本"被你添加到了你的组件 ...

  8. Unity firebase报错System.TypeInitializationException: The type initializer for Firebase.Editor.Measu

    工程中导入Firebase Analytisc dotnet4的库后,编辑器下报错如下: System.TypeInitializationException: The type initialize ...

  9. maximum number (256) of shader keywords exceeded unity的报错解决方法

    https://bitbucket.org/ArtIsDarkGames/shader-keywords-tool-unity3d/src/master/ https://eternity429.wo ...

最新文章

  1. Eclipse不编译解决方案
  2. ReactNative生成android平台的bundle文件命令
  3. Java多线程-Callable和Future
  4. 架构大型企业Java项目–我的虚拟JUG会话
  5. 使用SpringBoot yml配置文件
  6. python取的键不存在_Python3基础 dict get 在查询不存在的键时,返回指定的内容
  7. ubuntu下mysql5.7安装教程_Ubuntu 16.04 上安装 MySQL 5.7 教程
  8. html怎么判断字段,javascript怎么判断是否为字符串?
  9. 树莓派绿灯闪了几下不闪了_城市猎人的树莓派笔记一灯大师
  10. TensorFlow---(1)开源软件库TensorFlow最全教程和项目列表
  11. iPhone 5的发布日期估计为9月21日挂
  12. Dos下的edit命令
  13. PHP刷步数,微信支付宝修改步数刷步源码/带卡密功能PHP程序
  14. mysql查询同名同姓重名人数_查全国同名同姓,怎样查重名人数查询
  15. JavaFX:集成MarkDown
  16. 彻底删除EFI启动项
  17. 小波变换的matlab实现,维小波变换MATLAB实现
  18. android关机闹钟设计思路
  19. win7 锁定后硬盘灯常亮
  20. 这一天,我拿到了华为“天道酬勤”奖,这是我到海外的第十年

热门文章

  1. vue 中插槽的三种类型
  2. 什么是电竞?人们为什么观看它们?
  3. [Mac] gradle command not found 解决方法
  4. Arcgis-从全国地图中选取省份矢量的操作步骤
  5. 缺乏长线思考是扼杀工程师前途的屠刀.
  6. Python算法实战视频课程--二叉树-刘硕-专题视频课程
  7. vscode中flake8报错
  8. python调用c语言内核计算,在Linux上实现Python调用C语言函数
  9. 开发游戏陪玩app源码前,需要掌握的音视频格式知识
  10. 漏洞复现-webmin漏洞系列分析与利用