[LayaAir3]Layaair3.3.0-beta.4中2D导航数据清理报错

直接销毁所有子节点(this.roleBox.destroyChildren();)中添加了Laya.Nav2DAgent代理导航时会报错:
 
比如子节点有三个角色,其中两个角色正在寻路时,第三个角色执行了销毁所有子节点(this.roleBox.destroyChildren();)必然会报错
 
SpriteGlobaTransform.js:106 
 Uncaught TypeError: Cannot read properties of null (reading 'globalTrans')
    at SpriteGlobalTransform.setPos (SpriteGlobaTransform.js:106:36)
    at Nav2DAgent._updatePosition (Nav2DAgent.js:47:32)
    at Nav2DAgent._updateNavMesh (BaseNavAgent.js:289:14)
    at BaseNavMesh.js:185:19
    at Map.forEach (<anonymous>)
    at NavMesh2D._updateNavMesh (BaseNavMesh.js:181:25)
    at NavMesh2DSurface._update (BaseNavMeshSurface.js:203:27)
    at BaseNavigationManager.js:130:35
    at Map.forEach (<anonymous>)
    at Navigation2DManage.update (BaseNavigationManager.js:128:28)
 
然而在销毁所有子节点(this.roleBox.destroyChildren();)前面加上navMesh2DSurface.enabled = false就不会报错。
 
但是使用了navMesh2DSurface.enabled = false后再使用navMesh2DSurface.enabled = true导航不起作用了。
 
当前遇到一个非常棘手的问题:当房间中有三个角色正在寻路时,如果其中一个角色突然退出,此时执行"退出用户退出节点"操作必定会导致报错;然而,如果等到三个角色都完成寻路并停止移动后,再让该角色退出,则不会出现任何错误。
 
结论就是:使用2D导航代理时,如果当前所有代理都在执行时,其中一个节点销毁,如果销毁导航就会找不到,就会报错。
微信图片_20250706205936_231.png
已邀请:

visit

赞同来自:

当前遇到一个非常棘手的问题:当房间中有三个角色正在寻路时,如果其中一个角色突然退出,此时执行"退出用户退出节点"操作必定会导致报错;然而,如果等到三个角色都完成寻路并停止移动后,再让该角色退出,则不会出现任何错误。
 
结论就是:使用2D导航代理时,如果当前所有代理都在执行时,其中一个节点销毁,如果销毁导航就会找不到,就会报错。

LayaAir小牛

赞同来自:

您好,感谢您的反馈,我们已经复现此问题并记录。

要回复问题请先

商务合作
商务合作