Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Verwendung von NavigationPathQueryObjects

NavigationPathQueryObjects können zusammen mit NavigationServer.query_path() verwendet werden, um einen stark benutzerdefinierten Navigationspfad inklusive optionaler Metadaten über den Pfad zu erhalten.

Dies erfordert mehr Einstellungen als zum Erstellen eines normalen Navigationspfads, aber Sie können die Wegfindung und die bereitgestellten Pfaddaten an die verschiedenen Anforderungen eines Projekts anpassen.

NavigationPathQueryObjects bestehen aus zwei Objekten, einem NavigationPathQueryParameters-Objekt, das die Anpassungsoptionen für die Abfrage enthält, und einem NavigationPathQueryResult, das (regelmäßige) Aktualisierungen mit dem resultierenden Pfad und den Metadaten der Abfrage erhält.

2D und 3D-Versionen von NavigationPathQueryParameters sind als NavigationPathQueryParameters2D und NavigationPathQueryParameters3D verfügbar.

2D- und 3D-Versionen von NavigationPathQueryResult sind als NavigationPathQueryResult2D bzw. NavigationPathQueryResult3D verfügbar.

Sowohl Parameter als auch das Ergebnis werden als Paar mit der Funktion NavigationServer.query_path() verwendet.

Für die verfügbaren Anpassungsoptionen und ihre Verwendung siehe das Klassendokument der Parameter.

Beide Objekte sollen einmal im Voraus erstellt, in einer dauerhaften Variable für den Agenten gespeichert und für jede nachfolgende Pfadabfrage mit aktualisierten Parametern wiederverwendet werden, auch wenn dies nicht unbedingt erforderlich ist. Durch diese Wiederverwendung werden Auswirkungen auf die Performance vermieden, die sich aus der häufigen Erstellung von Objekten ergeben, wenn ein Projekt eine große Anzahl gleichzeitiger Agenten hat, die ihre Pfade regelmäßig aktualisieren.

# prepare query objects
var query_parameters = NavigationPathQueryParameters2D.new()
var query_result  = NavigationPathQueryResult2D.new()

# update parameters object
query_parameters.map = get_world_2d().get_navigation_map()
query_parameters.start_position = agent2d_current_global_position
query_parameters.target_position = agent2d_target_global_position

# update result object
NavigationServer2D.query_path(query_parameters, query_result)
var path: PackedVector2Array = query_result.get_path()
# prepare query objects
var query_parameters = NavigationPathQueryParameters3D.new()
var query_result  = NavigationPathQueryResult3D.new()

# update parameters object
query_parameters.map = get_world_3d().get_navigation_map()
query_parameters.start_position = agent3d_current_global_position
query_parameters.target_position = agent3d_target_global_position

# update result object
NavigationServer3D.query_path(query_parameters, query_result)
var path: PackedVector3Array = query_result.get_path()