Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

使用 NavigationRegion

NavigationRegion 是 NavigationServer 上導航地圖中「區域」的可視化節點表示。每個 NavigationRegion 節點都儲存一份導航網格資源。

2D 與 3D 版本分別為 NavigationRegion2DNavigationRegion3D

每個 NavigationRegion 會將其 2D NavigationPolygon 或 3D NavigationMesh 資源資料上傳至 NavigationServer。 它會將這些資訊組合成完整的導航地圖,以供路徑尋找使用。

若要透過場景樹建立導航區域,請在場景中新增 NavigationRegion2DNavigationRegion3D 節點。所有區域都需配置導航網格資源才能運作。詳見 使用導航網格 以瞭解如何建立與套用導航網格。

NavigationRegion 會自動將 global_transform 變更推送到 NavigationServer 上的區域,因此很適合用於移動平台。當各區域相距夠近時,NavigationServer 會嘗試連接這些區域的導航網格。詳情請參考 連接導覽網格。若需跨任意距離連接 NavigationRegion,請參考 使用 NavigationLink 以瞭解如何建立與使用 NavigationLinks

警告

雖然更動 NavigationRegion 節點的變換會更新 NavigationServer 上區域的位置,但縮放不會。導航網格資源本身不具備縮放屬性,當來源幾何體縮放時,必須完整重新產生網格。

導航區域可以啟用或停用。被停用的區域將不會參與後續的路徑尋找查詢。

備註

當區域被啟用或停用時,現有的路徑不會自動更新。

建立新導航區域

新增的 NavigationRegion 節點會自動註冊到其 2D 或 3D 維度的預設世界導航地圖。

可以透過 NavigationRegion 節點的 get_rid() 取得區域的 RID。

extends NavigationRegion2D

var navigationserver_region_rid: RID = get_rid()

也可用 NavigationServer API 直接建立新區域,並新增到任一現有地圖。

如果直接用 NavigationServer API 建立區域,需要手動指定導航地圖。

extends Node2D

func _ready() -> void:
    var new_region_rid: RID = NavigationServer2D.region_create()
    var default_map_rid: RID = get_world_2d().get_navigation_map()
    NavigationServer2D.region_set_map(new_region_rid, default_map_rid)

備註

導航區域只能分配給一個導航地圖。如果將已存在的區域指派到新地圖,該區域會自動離開舊地圖。