Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

使用 NavigationPathQueryObject

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

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

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

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

2D and 3D versions of NavigationPathQueryResult are available as NavigationPathQueryResult2D and NavigationPathQueryResult3D respectively.

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