使用 NavigationPathQueryObject
NavigationPathQueryObjects 可以與 NavigationServer.query_path() 一起使用,以獲得高度**定制的**導覽路徑,包括有關路徑的可選**元資料**。
與獲取正常的 NavigationPath 相比,這需要更多的設定,但可以讓您根據專案的不同需求定制尋路並提供路徑資料。
NavigationPathQueryObjects 由一對物件組成,一個「NavigationPathQueryParameters」物件保存查詢的自訂選項,另一個「NavigationPathQueryResult」接收查詢結果路徑和元資料的(定期)更新。
2D 與 3D 的 NavigationPathQueryParameters 分別有 NavigationPathQueryParameters2D 和 NavigationPathQueryParameters3D 可用。
NavigationPathQueryResult 有 2D 與 3D 兩種版本,分別為 NavigationPathQueryResult2D 與 NavigationPathQueryResult3D。
參數和結果都與“NavigationServer.query_path()”函式成對使用。
有關可用的自訂選項及其使用,請參閱參數的類別檔案。
雖然不是嚴格要求,但這兩個物件都旨在提前建立一次,儲存在代理程式的持久變數中,並在每個後續路徑查詢中重複使用更新的參數。如果專案具有大量同時定期更新其路徑的代理,則這種重用可以避免頻繁建立物件對效能造成的影響。
# Prepare query objects.
var query_parameters := NavigationPathQueryParameters2D.new()
var query_result := NavigationPathQueryResult2D.new()
func query_path(p_start_position: Vector2, p_target_position: Vector2, p_navigation_layers: int = 1) -> PackedVector2Array:
if not is_inside_tree():
return PackedVector2Array()
query_parameters.map = get_world_2d().get_navigation_map()
query_parameters.start_position = p_start_position
query_parameters.target_position = p_target_position
query_parameters.navigation_layers = p_navigation_layers
NavigationServer2D.query_path(query_parameters, query_result)
var path: PackedVector2Array = query_result.get_path()
return path
# Prepare query objects.
var query_parameters := NavigationPathQueryParameters3D.new()
var query_result := NavigationPathQueryResult3D.new()
func query_path(p_start_position: Vector3, p_target_position: Vector3, p_navigation_layers: int = 1) -> PackedVector3Array:
if not is_inside_tree():
return PackedVector3Array()
query_parameters.map = get_world_3d().get_navigation_map()
query_parameters.start_position = p_start_position
query_parameters.target_position = p_target_position
query_parameters.navigation_layers = p_navigation_layers
NavigationServer3D.query_path(query_parameters, query_result)
var path: PackedVector3Array = query_result.get_path()
return path