使用 NavigationPathQueryObject

NavigationPathQueryObjects 即导航路径查询对象,可以与 NavigationServer.query_path() 配合使用,对获取的导航路径进行丰富的自定义,指定包括元数据在内的各种项目。

与获取正常的NavigationPath相比,这需要更多的设定,但可以让你根据项目的不同需求定制寻路并提供路径数据。

NavigationPathQueryObjects由一对物件组成,一个 NavigationPathQueryParameters 物件保存查询的自定义选项,另一个 NavigationPathQueryResult 接收查询结果路径和元资料的(定期)更新。

NavigationPathQueryParameters 的 2D 和 3D 版本分别为 NavigationPathQueryParameters2DNavigationPathQueryParameters3D

NavigationPathQueryResult 的 2D 和 3D 版本分别为 NavigationPathQueryResult2DNavigationPathQueryResult3D

参数和结果都与 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