Unity中解决“SetDestination“ can only be called on an active agent that has been placed on a NavMesh
发布日期:2021-06-30 19:58:36 浏览次数:2 分类:技术文章

本文共 485 字,大约阅读时间需要 1 分钟。

一:前言

在使用导航组件时如果报错:"SetDestination" can only be called on an active agent that has been placed on a NavMesh,这个报错信息的重点其实并不在导航组件是否active


二:原因

游戏运行后使用Instantiate方式将实例化物体,再改变其初始位置,使得物体在实例化的一瞬间距离导航网格过远,使得导航失效

GameObject go = Instantiate(prefab);go.transform.position = new Vector3(1, 2, 3);

三:解决方法(三种)

——在实例化的同时设置位置

GameObject go = Instantiate(prefab, new Vector3(1, 2, 3), Quaternion.identity);

 

——将物体身上的导航组件先关闭,在设置好位置后在开启

 

——判断物体是否在导航网格上,如果不在就纠正位置

if(agent.isOnNavMesh){    agent.Warp(pos);}

 

转载地址:https://liuhaowen.blog.csdn.net/article/details/117636710 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Unity中的刚体
下一篇:U3D游戏开发框架(九)——事件序列

发表评论

最新留言

不错!
[***.144.177.141]2024年04月25日 14时07分35秒