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.

使用 NavigationMap

../../_images/nav_maps.png

NavigationMap 是 NavigationServer 上的抽象導航世界,並以 NavigationServer 的 RID 作為識別。

導航地圖可以容納並連接近乎無限數量的導航區域和導航網格,以構建遊戲世界中可行走的區域,提供路徑尋找功能。

導航地圖可以包含避障代理。碰撞避免會根據地圖中存在的代理進行計算。

備註

不同的導航地圖彼此完全獨立,但導航區域與避障代理可以在不同地圖間切換。切換動作會在 NavigationServer 同步時生效。

預設導航地圖

預設情況下,Godot 會為根視窗的每個 World2DWorld3D 建立一個導航地圖。

2D 預設導航地圖的 RID 可以透過任何繼承 Node 的 Node2D 使用 get_world_2d().get_navigation_map() 取得。

3D 預設導航地圖的 RID 可以透過任何繼承 Node 的 Node3D 使用 get_world_3d().get_navigation_map() 取得。

extends Node2D

func _ready() -> void:
    var default_navigation_map_rid: RID = get_world_2d().get_navigation_map()

建立新導航地圖

NavigationServer 可以根據遊戲需求建立及支援任意數量的導航地圖。若需支援不同的避障代理或角色移動類型,可以直接使用 NavigationServer API 來建立與管理額外的導航地圖。

有關不同導航地圖的應用範例,請參閱 支援不同角色型別支援不同角色移動方式

每個導航地圖會獨立同步其導航區域和避障代理的變更佇列。未發生變更的導航地圖幾乎不會消耗處理時間。導航區域與避障代理僅能隸屬於單一導航地圖,但可隨時切換至其他地圖。

備註

導航地圖的切換僅會在下次 NavigationServer 同步時生效。

extends Node2D

func _ready() -> void:
    var new_navigation_map: RID = NavigationServer2D.map_create()
    NavigationServer2D.map_set_active(new_navigation_map, true)

備註

使用 NavigationServer2D API 或 NavigationServer3D API 建立的導航地圖沒有任何差異。