Використання NavigationPath QueryObjects

NavigationPathQueryObjects можна використовувати разом з NavigationServer.query_path() для отримання сильно спеціалізованого шляху навігації, включаючи додаткові метадані про шлях.

Це вимагає додаткових налаштувань порівняно з отриманням звичайного NavigationPath, але дозволяє адаптувати пошук шляху та надані дані шляху до різних потреб проекту.

NavigationPathQueryObjects складається з пари об’єктів, об’єкта NavigationPathQueryParameters, що містить параметри налаштування для запиту, і NavigationPathQueryResult, який отримує (регулярні) оновлення з кінцевим шляхом і метаданими із запиту.

2D і 3D версії NavigationPathQueryParameters доступні як NavigationPathQueryParameters2D і NavigationPathQueryParameters3D відповідно.

2D і 3D версії NavigationPathQueryResult доступні як 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