NavigationMesh¶
实验性: This class may be changed or removed in future versions.
继承: Resource < RefCounted < Object
定义可穿越区域和障碍物的导航网格。
描述¶
导航网格是多边形的集合,定义了环境的哪些区域可以遍历,以帮助代理在复杂空间中进行寻路。
属性¶
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
方法¶
void |
add_polygon(polygon: PackedInt32Array) |
void |
clear() |
void |
|
void |
create_from_mesh(mesh: Mesh) |
get_collision_mask_value(layer_number: int) const |
|
get_polygon(idx: int) |
|
get_polygon_count() const |
|
get_vertices() const |
|
void |
set_collision_mask_value(layer_number: int, value: bool) |
void |
set_vertices(vertices: PackedVector3Array) |
枚举¶
enum SamplePartitionType: 🔗
SamplePartitionType SAMPLE_PARTITION_WATERSHED = 0
分水岭分区。如果您预先计算导航网格,通常是最佳选择,如果您有较大的开放区域,请使用它。
SamplePartitionType SAMPLE_PARTITION_MONOTONE = 1
单调分区。如果您想要快速导航网格生成,请使用它。
SamplePartitionType SAMPLE_PARTITION_LAYERS = 2
图层分区。用于具有中小型图块的平铺导航网格的好选择。
SamplePartitionType SAMPLE_PARTITION_MAX = 3
表示SamplePartitionType枚举的大小。
enum ParsedGeometryType: 🔗
ParsedGeometryType PARSED_GEOMETRY_MESH_INSTANCES = 0
将网格实例解析为几何。这包括MeshRender、ICSGShapeBase和GridMap节点。
ParsedGeometryType PARSED_GEOMETRY_STATIC_COLLIDERS = 1
将StaticBulk碰撞器解析为几何。碰撞器应位于geometry_collision_mask指定的任何层中。
ParsedGeometryType PARSED_GEOMETRY_BOTH = 2
PARSED_GEOMETRY_MESH_INSTANCES和PARSED_GEOMETRY_STATIC_COLLIDERS。
ParsedGeometryType PARSED_GEOMETRY_MAX = 3
表示ParsedGeometryType枚举的大小。
enum SourceGeometryMode: 🔗
SourceGeometryMode SOURCE_GEOMETRY_ROOT_NODE_CHILDREN = 0
递归扫描根节点的子节点以查找几何体。
SourceGeometryMode SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN = 1
递归扫描组中的节点及其子节点以查找几何体。该组由geometry_source_group_name指定。
SourceGeometryMode SOURCE_GEOMETRY_GROUPS_EXPLICIT = 2
将组中的节点用于几何。该组由geometry_source_group_name指定。
SourceGeometryMode SOURCE_GEOMETRY_MAX = 3
表示SourceGeometryMode枚举的大小。
属性说明¶
最小的地板到天花板高度,仍然允许地板面积被认为是可步行的。
注意:烘烤时,此值将向上舍入到cell_height的最接近倍数。
float agent_max_climb = 0.25 🔗
被认为仍然可以穿越的最小壁架高度。
注意:烘烤时,此值将四舍五入到cell_height的最接近倍数。
float agent_max_slope = 45.0 🔗
被认为是可步行的最大坡度,以度为单位。
侵蚀/缩小高度场的可步行区域远离障碍物的距离。
注意:烘烤时,此值将向上舍入到cell_size的最接近倍数。
烘焙边界区域周围不可导航边界的大小。
结合filter_baking_aabb和1.0或以下边框大小的edge_max_error值,可用于烘焙平铺对齐的导航网格,而平铺边缘不会被agent_radius缩小。
注意:烘烤时不为零,此值将四舍五入到cell_size的最接近倍数。
用于光栅化Y轴上的导航网格顶点的单元格高度。必须与导航地图上的单元格高度匹配。
用于光栅化XZ平面上的导航网格顶点的单元格大小。必须与导航地图上的单元格大小匹配。
float detail_sample_distance = 6.0 🔗
生成细节网格时使用的采样距离,以单元格为单位。
float detail_sample_max_error = 1.0 🔗
细节网格表面应偏离高度场的最大距离,以单元格为单位。
简化轮廓边缘的最大距离应该偏离原始原始轮廓。
沿着网格边界的轮廓边缘允许的最大长度。0.0值禁用此功能。
注意:烘烤时,此值将向上舍入到cell_size的最接近倍数。
AABB filter_baking_aabb = AABB(0, 0, 0, 0, 0, 0) 🔗
如果烘焙AABB有一个体积,导航网格烘焙将被限制在其封闭区域。
Vector3 filter_baking_aabb_offset = Vector3(0, 0, 0) 🔗
应用于filter_baking_aabbAABB的位置偏移。
bool filter_ledge_spans = false 🔗
如果true,则将壁架的跨度标记为不可步行。
bool filter_low_hanging_obstacles = false 🔗
如果true,则将不可步行跨度标记为可步行跨度,如果它们的最大值在可步行邻居的agent_max_climb内。
bool filter_walkable_low_height_spans = false 🔗
如果true,则如果跨度上方的间隙小于agent_height,则将可步行跨度标记为不可步行。
int geometry_collision_mask = 4294967295 🔗
要扫描静态碰撞器的物理层。
仅在geometry_parsed_geometry_type为PARSED_GEOMETRY_STATIC_COLLIDERS或PARSED_GEOMETRY_BOTH时使用。
ParsedGeometryType geometry_parsed_geometry_type = 2 🔗
void set_parsed_geometry_type(value: ParsedGeometryType)
ParsedGeometryType get_parsed_geometry_type()
确定哪种类型的节点将被解析为几何。有关可能的值,请参阅ParsedGeometryType。
SourceGeometryMode geometry_source_geometry_mode = 0 🔗
void set_source_geometry_mode(value: SourceGeometryMode)
SourceGeometryMode get_source_geometry_mode()
烘焙时使用的几何体的来源。有关可能的值,请参阅SourceGeometryMode。
StringName geometry_source_group_name = &"navigation_mesh_source_group" 🔗
void set_source_group_name(value: StringName)
StringName get_source_group_name()
要扫描几何体的组的名称。
仅在geometry_source_geometry_mode为SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN或SOURCE_GEOMETRY_GROUPS_EXPLICIT时使用。
float region_merge_size = 20.0 🔗
如果可能,任何大小小于此的区域都将与更大的区域合并。
注意:此值将平方以计算单元格数。例如,值为20将单元格数设置为400。
要创建的区域的最小大小。
注意:此值将被平方以计算允许形成孤立岛屿区域的最小单元格数。例如,值为8将单元格数设置为64。
SamplePartitionType sample_partition_type = 0 🔗
void set_sample_partition_type(value: SamplePartitionType)
SamplePartitionType get_sample_partition_type()
用于创建导航网格多边形的分区算法。有关可能的值,请参阅SamplePartitionType。
float vertices_per_polygon = 6.0 🔗
在轮廓到多边形转换过程中生成的多边形允许的最大顶点数。
方法说明¶
void add_polygon(polygon: PackedInt32Array) 🔗
使用调用get_vertices()时获得的顶点索引添加多边形。
void clear() 🔗
清除顶点和多边形索引的内部数组。
void clear_polygons() 🔗
清除多边形数组,但不清除顶点数组。
void create_from_mesh(mesh: Mesh) 🔗
通过根据Mesh设置顶点和索引来初始化导航网格。
注意:给定的mesh必须是Mesh.PRIMITIVE_TRIANGLES类型并具有索引数组。
bool get_collision_mask_value(layer_number: int) const 🔗
返回geometry_collision_mask的指定层是否启用,给定介于1和32之间的layer_number。
PackedInt32Array get_polygon(idx: int) 🔗
返回一个PackedInt32Array,其中包含创建的多边形顶点的索引。
int get_polygon_count() const 🔗
返回导航网格中多边形的数量。
PackedVector3Array get_vertices() const 🔗
返回一个PackedVector3Array,其中包含用于创建多边形的所有顶点。
void set_collision_mask_value(layer_number: int, value: bool) 🔗
基于value,启用或禁用geometry_collision_mask中的指定层,给定1到32之间的layer_number。
void set_vertices(vertices: PackedVector3Array) 🔗
设置可以被索引的顶点,然后使用add_polygon()方法创建多边形。