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()

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