连接导航网格

如果不同的 NavigationMesh 至少有一条边的两个顶点位于完全重合的位置,那么 NavigationServer 就会自动将这两个网格合并。

要连接任意距离的两个位置,见 使用 NavigationLink

../../_images/navigation_vertex_merge.png

对于多个NavigationPolygon资源也是如此。只要它们的轮廓点完全重叠,导览服务器就会合并它们。NavigationPolygon轮廓必须来自不同的NavigationPolygon资源才能连接。

同一NavigationPolygon上的重叠或相交轮廓将导致导览网格建立失败。来自不同导览多边形的重叠或相交轮廓通常无法在导览服务器上建立导览区域边缘连接,因此应避免。

../../_images/navigation_vertex_merge2.png

警告

精确意味着精确地进行顶点位置合并。汇入的网格经常发生的小 float 错误将阻止成功的顶点合并。

或者,当导航网格的边几乎平行且彼此相距一定距离时,导航服务器不会合并导航网格,但仍将其视为**连接**。连接距离由每个导航地图的“edge_connectionmargin”定义。在许多情况下,导航网格边在部分重叠时无法正确连接。为了实现一致的合并行为,最好始终避免任何导航网格重叠。

../../_images/navigation_edge_connection.png

如果启用了导览调试并且导览服务器处于活动状态,则已建立的导览网格联机将可视化。有关导览调试选项的更多信息,请参阅 导航调试工具

默认的 2D edge_connection_margin 可以在 ProjectSettings 的 navigation/2d/default_edge_connection_margin 中修改。

默认的 3D edge_connection_margin 可以在 ProjectSettings 的 navigation/3d/default_edge_connection_margin 中修改。

任何导览地图的边缘联机边距值也可以在执行时使用NavigationServer API进行变更。

2D GDScript3D GDScript

  1. extends Node2D
  2. func _ready() -> void:
  3. # 2D margins are designed to work with 2D "pixel" values.
  4. var default_map_rid: RID = get_world_2d().get_navigation_map()
  5. NavigationServer2D.map_set_edge_connection_margin(default_map_rid, 50.0)
  1. extends Node3D
  2. func _ready() -> void:
  3. # 3D margins are designed to work with 3D world unit values.
  4. var default_map_rid: RID = get_world_3d().get_navigation_map()
  5. NavigationServer3D.map_set_edge_connection_margin(default_map_rid, 0.5)

备注

更改边缘连接边距将触发导览服务器上所有导览网格连接的完整更新。