使用 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() 函数成对使用。

有关可用的自定义选项及其使用,请参阅参数的类文档。

虽然这不是一个严格的要求,但这两个对象都要提前创建一次,存储在代理的持久变量中,并通过更新的参数重复用于每个后续路径查询。如果项目有大量同时进行的代理定期更新其路径,则这种重用可以避免频繁创建对象所带来的性能影响。

2D GDScript3D GDScript

  1. # Prepare query objects.
  2. var query_parameters := NavigationPathQueryParameters2D.new()
  3. var query_result := NavigationPathQueryResult2D.new()
  4. func query_path(p_start_position: Vector2, p_target_position: Vector2, p_navigation_layers: int = 1) -> PackedVector2Array:
  5. if not is_inside_tree():
  6. return PackedVector2Array()
  7. query_parameters.map = get_world_2d().get_navigation_map()
  8. query_parameters.start_position = p_start_position
  9. query_parameters.target_position = p_target_position
  10. query_parameters.navigation_layers = p_navigation_layers
  11. NavigationServer2D.query_path(query_parameters, query_result)
  12. var path: PackedVector2Array = query_result.get_path()
  13. return path
  1. # Prepare query objects.
  2. var query_parameters := NavigationPathQueryParameters3D.new()
  3. var query_result := NavigationPathQueryResult3D.new()
  4. func query_path(p_start_position: Vector3, p_target_position: Vector3, p_navigation_layers: int = 1) -> PackedVector3Array:
  5. if not is_inside_tree():
  6. return PackedVector3Array()
  7. query_parameters.map = get_world_3d().get_navigation_map()
  8. query_parameters.start_position = p_start_position
  9. query_parameters.target_position = p_target_position
  10. query_parameters.navigation_layers = p_navigation_layers
  11. NavigationServer3D.query_path(query_parameters, query_result)
  12. var path: PackedVector3Array = query_result.get_path()
  13. return path