Unity寻路报错“SetDestination“ can only be called on an active agent that has been placed on a NavMesh.
这个报错表示NavMeshAgent所在节点未放置在寻路网格上。出现这个错误一般伴有
"Failed to create agent because it is not close enough to the NavMesh"类似警告。
表明寻路代理创建失败,后续设置目的地肯定就会导致失败。
出现此类问题需要检查:
- 在调用SetDestination的时候,NavMeshAgent是否启用
- NavMeshSurface是否存在
如果所有都设置正确,但是还是报这个错误。恭喜你,跟我遇到了相同的问题~
这个报错我在Editor与测试APK总都没有遇到过(如果遇到肯定早想办法解决了~),等项目上线了,发现bugly上报非常多这个报错。让我非常费解,幸运的是我找了NavMeshAgent的源码,才找到了一个稍微安全一点避免错误的方式。
Agent寻路中一个比较重要的功能是避障功能,Unity采用了一个叫群组绕行管理器(Detour Crowd Manager)来管理Agent。当我们可以调用SetDestination的前提就是我们的Agent被添加到了这个绕行管理器中。以下有几种方式会触发添加行为:
- NavMeshSurface变更,比如的Obstacle挖孔就会触发这个行为
- NavMeshAgent::OnEnable的时候会尝试去添加
- 调用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.相关推荐
- 导航报错SetDestination() can only be called on an active agent that has been placed on a NavMesh
原因:初始化导航组件 NavMeshAgent 的时候,agent 离navmesh太远.isOnNavMesh属性为false: 解决办法: 在初始化预制体的时候,传入诞生点位置和旋转信息. Gam ...
- 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 ...
- 修复Unity空白报错问题
修复Unity空白报错问题 在升级Unity Hub之后,偶然发现Console里有几行空白的报错,看不到任何信息,由于有报错,导致修改代码无法生效.尝试重启项目,重装Unity都完全没效果.而且就算 ...
- unity打包报错,又是血压升高的一天
unity打包遇到的报错,部分在androidstudio里同样方式解决 首先说一个还没搞明白的问题.项目之前打包一直使用的Internal模式,一直没有问题,在没动过所有与sdk有关的文件(包括架包 ...
- 用谷歌浏览器打开本地unity webgl报错
问题描述 unity打包webgl,双击index.html,用谷歌浏览器打开,报错: Failed to download file Build/Test4_Build_WebGL.framewor ...
- Unity 3D | 报错:UnassignedReferenceException: The variable “***” of “***” has not been assigned.
简介 最近开始学习unity3D建模,在Unity 3D脚本应用实例演示(三个实例)上学习了一个案例设计,C# 程序如下: using UnityEngine; using System.Collec ...
- Unity 3D 报错:UnassignedReferenceException: The variable *** of *** has not been assigned.
"某变量未被赋值" 在已知给目前的组件添加好正确的prefab/正确的C#脚本后,仍出现这样的报错. 检查一下是否有"未启用的不完善的脚本"被你添加到了你的组件 ...
- Unity firebase报错System.TypeInitializationException: The type initializer for Firebase.Editor.Measu
工程中导入Firebase Analytisc dotnet4的库后,编辑器下报错如下: System.TypeInitializationException: The type initialize ...
- maximum number (256) of shader keywords exceeded unity的报错解决方法
https://bitbucket.org/ArtIsDarkGames/shader-keywords-tool-unity3d/src/master/ https://eternity429.wo ...
最新文章
- Eclipse不编译解决方案
- ReactNative生成android平台的bundle文件命令
- Java多线程-Callable和Future
- 架构大型企业Java项目–我的虚拟JUG会话
- 使用SpringBoot yml配置文件
- python取的键不存在_Python3基础 dict get 在查询不存在的键时,返回指定的内容
- ubuntu下mysql5.7安装教程_Ubuntu 16.04 上安装 MySQL 5.7 教程
- html怎么判断字段,javascript怎么判断是否为字符串?
- 树莓派绿灯闪了几下不闪了_城市猎人的树莓派笔记一灯大师
- TensorFlow---(1)开源软件库TensorFlow最全教程和项目列表
- iPhone 5的发布日期估计为9月21日挂
- Dos下的edit命令
- PHP刷步数,微信支付宝修改步数刷步源码/带卡密功能PHP程序
- mysql查询同名同姓重名人数_查全国同名同姓,怎样查重名人数查询
- JavaFX:集成MarkDown
- 彻底删除EFI启动项
- 小波变换的matlab实现,维小波变换MATLAB实现
- android关机闹钟设计思路
- win7 锁定后硬盘灯常亮
- 这一天,我拿到了华为“天道酬勤”奖,这是我到海外的第十年