【网格导航报错解决方案】:SetDestination“can only be called on an active agent that has been placed on a NavMesh

在Unity中制作游戏时遇到角色导航报错,原因是使用Instantiate加载角色后,角色瞬间距离导航网格过远导致导航失效。解决方法包括在实例化时直接设置位置、使用Warp方法或在初始化时禁用NavMeshAgent,待需要时再启用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在使用unity制作游戏demo角色导航功能的时候,遇到了"SetDestination"can only be called on an active agent that has been placed on a NavMesh报错。找了找原因后发现,在正确的设置好导航网格后,如果角色已经放置在导航网格上,运行游戏则正常导航,但如果角色是运行游戏后加载进场景,会触发上述报错。

  GameObject temp = Resources.Load(Constants.playerNormalPath);
  GameObject player = Instantiate(temp);
  player.transform.position = new Vector3(30, 0, 45);
  agent = player.GetComponent();
  agent.SetDestination(new Vector3(32, 0, 53));

原因:游戏运行后使用Instantiate方式将角色载入场景后,再改变其初始位置,使得角色在载入的一瞬间距离导航网格过远,使得导航失效!

解决办法有三种:

1.实例化物体时直接传入位置信息:

GameObject player = Instantiate(temp,new Vector3(30, 0, 45),Quaternion.identity);

2.实例化物体后设置所在导航网格内位置:

NavMeshAgent agent = player.GetComponent();
agent.Warp(new Vector3(30, 0, 45));

3.角色预制体上首先将NavMeshAgent组件的enable设置为false,等到需要导航时再将其设置为true。

(我这次使用第三种完美解决)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值