使用 NavigationPathQueryObject
NavigationPathQueryObjects
即导航路径查询对象,可以与 NavigationServer.query_path()
配合使用,对获取的导航路径进行丰富的自定义,指定包括元数据在内的各种项目。
与获取正常的NavigationPath相比,这需要更多的设定,但可以让你根据项目的不同需求定制寻路并提供路径数据。
NavigationPathQueryObjects由一对物件组成,一个 NavigationPathQueryParameters
物件保存查询的自定义选项,另一个 NavigationPathQueryResult
接收查询结果路径和元资料的(定期)更新。
NavigationPathQueryParameters
的2D和3D版本分别为 NavigationPathQueryParameters2D 和 NavigationPathQueryParameters3D 。
2D and 3D versions of NavigationPathQueryResult
are available as NavigationPathQueryResult2D and NavigationPathQueryResult3D respectively.
参数和结果都与 NavigationServer.query_path()
函数成对使用。
有关可用的自定义选项及其使用,请参阅参数的类文档。
虽然这不是一个严格的要求,但这两个对象都要提前创建一次,存储在代理的持久变量中,并通过更新的参数重复用于每个后续路径查询。如果项目有大量同时进行的代理定期更新其路径,则这种重用可以避免频繁创建对象所带来的性能影响。
2D GDScript3D GDScript
# 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
# Prepare query objects.
var query_parameters := NavigationPathQueryParameters3D.new()
var query_result := NavigationPathQueryResult3D.new()
func query_path(p_start_position: Vector3, p_target_position: Vector3, p_navigation_layers: int = 1) -> PackedVector3Array:
if not is_inside_tree():
return PackedVector3Array()
query_parameters.map = get_world_3d().get_navigation_map()
query_parameters.start_position = p_start_position
query_parameters.target_position = p_target_position
query_parameters.navigation_layers = p_navigation_layers
NavigationServer3D.query_path(query_parameters, query_result)
var path: PackedVector3Array = query_result.get_path()
return path