連接導覽網格
當一條邊的至少兩個頂點位置完全重疊時,NavigationServer 會自動合併不同的導覽網格。
若要連接任意距離,請參閱 使用 NavigationLink。
多個 NavigationPolygon 資源的情況也相同。只要它們的輪廓點完全重疊,NavigationServer 就會自動合併它們。要連接,NavigationPolygon 的輪廓必須來自不同的 NavigationPolygon 資源。
同一個 NavigationPolygon 上重疊或相交的輪廓會導致導覽網格建立失敗。不同 NavigationPolygon 之間重疊或相交的輪廓,通常也無法在 NavigationServer 上建立區域邊緣連接,因此應避免這種情況。
警告
頂點位置合併必須完全精確。匯入網格常見的小數點誤差都會導致頂點無法正確合併。
另外,若兩個導覽網格的邊緣幾乎平行且彼此接近,即使沒有合併,NavigationServer 也會將它們視為**已連接**。這個連接距離由每個導覽地圖的 edge_connection_margin 屬性決定。多數情況下,導覽網格邊緣如果部分重疊會導致無法正確連接。為了確保行為一致,建議始終避免導覽網格重疊。
啟用導覽除錯並且 NavigationServer 處於啟用狀態時,已建立的導覽網格連接會被視覺化顯示。有關導覽除錯選項的詳細資訊,請參閱 導航除錯工具。
預設的 2D edge_connection_margin 可以在 ProjectSettings 的 navigation/2d/default_edge_connection_margin 進行設定。
預設的 3D edge_connection_margin 可以在 ProjectSettings 的 navigation/3d/default_edge_connection_margin 進行設定。
任何導覽地圖的邊緣連接邊距值,也可在執行時透過 NavigationServer API 動態調整。
extends Node2D
func _ready() -> void:
# 2D margins are designed to work with 2D "pixel" values.
var default_map_rid: RID = get_world_2d().get_navigation_map()
NavigationServer2D.map_set_edge_connection_margin(default_map_rid, 50.0)
using Godot;
public partial class MyNode2D : Node2D
{
public override void _Ready()
{
// 2D margins are designed to work with 2D "pixel" values.
Rid defaultMapRid = GetWorld2D().NavigationMap;
NavigationServer2D.MapSetEdgeConnectionMargin(defaultMapRid, 50.0f);
}
}
extends Node3D
func _ready() -> void:
# 3D margins are designed to work with 3D world unit values.
var default_map_rid: RID = get_world_3d().get_navigation_map()
NavigationServer3D.map_set_edge_connection_margin(default_map_rid, 0.5)
using Godot;
public partial class MyNode3D : Node3D
{
public override void _Ready()
{
// 3D margins are designed to work with 3D world unit values.
Rid defaultMapRid = GetWorld3D().NavigationMap;
NavigationServer3D.MapSetEdgeConnectionMargin(defaultMapRid, 0.5f);
}
}
備註
更改邊緣連接邊距會觸發 NavigationServer 上所有導覽網格連接的完整重新更新。