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

这篇具有很好参考价值的文章主要介绍了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"类似警告。

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

出现此类问题需要检查:

  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来修改。

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

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

至于为什么会出现这种情况,我猜想是首次添加Detour Crowd的时候没有成功,失败的原因也很多,因为无法去debug,只能有这种猜想。后续由于没有再次触发这种添加行为导致的出错。不过至少,直接使用Warp设置坐标,可以保证不出错误。文章来源地址https://www.toymoban.com/news/detail-404107.html

到了这里,关于Unity寻路报错“SetDestination“ can only be called on an active agent that has been placed on a NavMesh.的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • errMsg: “getUserProfile:fail can only be invoked by user TAP gesture.(微信小程序报错)

    目录 无法获取用户信息:  解决方法: 无法渲染头像: 解决办法: {errMsg: \\\"getUserProfile:fail can only be invoked by user TAP gesture.\\\"} errMsg: \\\"getUserProfile:fail can only be invoked by user TAP gesture.\\\" constructor: (...) hasOwnProperty: (...) isPrototypeOf: (...) propertyIsEnumerable: (...) toLocaleString: (...) toStrin

    2024年02月09日
    浏览(56)
  • [vue warn]: inject() can only be used inside setup()

    问题背景:最近在用vue3写管理系统的登录功能的时候,在封装axios之后浏览器控制台出现警告: [Vue warn]: inject() can only be used inside setup() or functional components. 原因:因为在vue3中useRouter,useStore要放在setup中引入,我们在封装axios文件中不能直接引入。 1.bug提示:  2.然后我们就

    2024年02月05日
    浏览(50)
  • ERROR: There can be only one Game target per project.

    UATHelper: Packaging (Windows (64-bit)): ERROR: There can be only one Game target per project. D:dockIntermediateSource 把旧的文件删去 一般会出现在更改项目名称后 感谢 There can be only one Game target per project - Development Discussion / Content Creation - Unreal Engine ForumsThere can be only one Game target per project - 

    2024年02月08日
    浏览(49)
  • getUserProfile:fail can only be invoked by user TAP gesture

    获取用户信息失败,error: getUserProfile:fail can only be invoked by user TAP gesture 它的大概意思就是: 该接口必须用户点击才可以调通 官方获取用户信息调整通告:小程序登录、用户信息相关接口调整说明 | 微信开放社区 wx.getUserProfile(Object object) 所以改造下方法,让用户先点击 前端

    2024年02月11日
    浏览(44)
  • 解决only one element tensors can be converted to Python scalars

    目录 解决 \\\"only one element tensors can be converted to Python scalars\\\" 错误 问题源头 解决方法 方法一:使用​​item()​​方法 方法二:使用索引操作 总结 语法 参数 返回值 使用场景 示例 当我们使用PyTorch进行深度学习任务时,有时会遇到以下错误信息:\\\"only one element tensors can be conve

    2024年02月03日
    浏览(47)
  • TypeError: only size-1 arrays can be converted to Python scalars

    Traceback (most recent call last):   File \\\"/home/yjq/socket_test/server2.py\\\", line 22, in module     msg.data = float(np.array(eval(from_client_msg.decode(\\\"gbk\\\"))))#先转换为列表,再转为数组                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: only size-1 arrays can be converted to Python scalars 这个

    2024年02月12日
    浏览(37)
  • File chooser dialog can only be shown with a user activation.

    使用vue开发时,通过ref通过“this.refs.[name].$el.click()”触发按钮时提示“File chooser dialog can only be shown with a user activation.”,按钮不能触发,网上解决办法是“dispatchEvent(new MouseEvent(\\\'click\\\'))”代替“$el.click()”,在我所在的场景不生效,所以就在要出发按钮组件上加了一个id,按

    2024年01月23日
    浏览(48)
  • 解决TypeError: only size-1 arrays can be converted to Python scalars

    目录 解决TypeError: only size-1 arrays can be converted to Python scalars 错误示例 错误分析 解决方法 方法一:使用​​flatten()​​ 方法二:使用ravel() 结论 在Python中,当我们尝试将一个数组作为标量(scalar)进行操作时,有时会遇到 ​ ​TypeError: only size-1 arrays can be converted to Python sca

    2024年02月05日
    浏览(51)
  • 【小程序】报getUserProfile:fail can only be invoked by user TAP gesture.

    最近新搭建了个小程序项目,登录时报getUserProfile:fail can only be invoked by user TAP gesture.这个错误。查了网上说的是使用了async和await,试着改了不用async和await,结果还是一样报这个错误。 我的代码是用户点击授权按钮后,先使用wx.login,接着后面使用wx.getUserProfile,在同一个方法

    2024年02月12日
    浏览(44)
  • TypeError: only integer scalar arrays can be converted to a scalar index

    报错信息: 类型错误,只有整型标量数组才能转换成标量索引,但一般问题都不在于你的索引是不是整数。这个报错一般会出现在你想使用一个索引列表去索引另一个列表,即诸如list[index_list]的形式,此时就会出现此报错,因为 index_list 为 List列表类型,不被允许;如果是数

    2024年02月11日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包