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.
Checking the stable version of the documentation...
使用 NavigationRegion
NavigationRegion 是 NavigationServer 上導航地圖中「區域」的可視化節點表示。每個 NavigationRegion 節點都儲存一份導航網格資源。
2D 與 3D 版本分別為 NavigationRegion2D 與 NavigationRegion3D。
每個 NavigationRegion 會將其 2D NavigationPolygon 或 3D NavigationMesh 資源資料上傳至 NavigationServer。 它會將這些資訊組合成完整的導航地圖,以供路徑尋找使用。
若要透過場景樹建立導航區域,請在場景中新增 NavigationRegion2D 或 NavigationRegion3D 節點。所有區域都需配置導航網格資源才能運作。詳見 使用導航網格 以瞭解如何建立與套用導航網格。
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()
public partial class MyNavigationRegion2D : NavigationRegion2D
{
public override void _Ready()
{
Rid navigationServerRegionRid = GetRid();
}
}
extends NavigationRegion3D
var navigationserver_region_rid: RID = get_rid()
public partial class MyNavigationRegion3D : NavigationRegion3D
{
public override void _Ready()
{
Rid navigationServerRegionRid = GetRid();
}
}
也可用 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)
public partial class MyNode2D : Node2D
{
public override void _Ready()
{
Rid newRegionRid = NavigationServer2D.RegionCreate();
Rid defaultMapRid = GetWorld2D().NavigationMap;
NavigationServer2D.RegionSetMap(newRegionRid, defaultMapRid);
}
}
extends Node3D
func _ready() -> void:
var new_region_rid: RID = NavigationServer3D.region_create()
var default_map_rid: RID = get_world_3d().get_navigation_map()
NavigationServer3D.region_set_map(new_region_rid, default_map_rid)
public partial class MyNode3D : Node3D
{
public override void _Ready()
{
Rid newRegionRid = NavigationServer3D.RegionCreate();
Rid defaultMapRid = GetWorld3D().NavigationMap;
NavigationServer3D.RegionSetMap(newRegionRid, defaultMapRid);
}
}
備註
導航區域只能分配給一個導航地圖。如果將已存在的區域指派到新地圖,該區域會自動離開舊地圖。