NavigationServer3D¶
实验性: This class may be changed or removed in future versions.
继承: Object
用于低级3D导航访问的服务器接口。
描述¶
NavigationServer3D是处理导航地图、区域和代理的服务器。它不处理来自AStar3D的A*导航。
地图被划分为区域,区域由导航网格组成。它们一起定义了3D世界中的可导航区域。
注意:大多数NavigationServer3D更改在下一个物理帧之后生效,而不是立即生效。这包括场景树中导航相关节点或通过脚本对地图、区域或代理所做的所有更改。
要使两个区域相互连接,它们必须共享相似的边。如果一条边的两个顶点与另一条边的距离都小于edge_connection_margin,则认为一条边与另一条边相连。
您可以使用region_set_navigation_layers()将导航层分配给区域,然后可以在使用map_get_path()请求路径时检查该区域。这可用于允许或拒绝某些对象的某些区域。
要使用避免碰撞系统,您可以使用代理。您可以设置代理的目标速度,然后服务器将发出具有修改速度的回调。
注:避碰系统忽略区域。直接使用修改后的速度可能会将代理移动到可穿越区域之外。这是避碰系统的一个限制,任何更复杂的情况都可能需要使用物理引擎。
此服务器跟踪任何调用并在同步阶段执行它们。这意味着您可以使用任何线程请求对映射的任何更改,而无需担心。
方法¶
信号¶
avoidance_debug_changed() 🔗
更改避免调试设置时发出。仅在调试版本中可用。
当导航地图更新、区域移动或修改时发出。
navigation_debug_changed() 🔗
更改导航调试设置时发出。仅在调试版本中可用。
枚举¶
enum ProcessInfo: 🔗
ProcessInfo INFO_ACTIVE_MAPS = 0
常数以获取活动导航地图的数量。
ProcessInfo INFO_REGION_COUNT = 1
常数以获取活动导航区域的数量。
ProcessInfo INFO_AGENT_COUNT = 2
常数得到主动导航代理处理回避的数量。
ProcessInfo INFO_LINK_COUNT = 3
常数以获取活动导航链接的数量。
ProcessInfo INFO_POLYGON_COUNT = 4
常数得到导航网格多边形的数量。
ProcessInfo INFO_EDGE_COUNT = 5
常数得到导航网格多边形边缘的数量。
ProcessInfo INFO_EDGE_MERGE_COUNT = 6
常数以获取由于边缘键重叠而合并的导航网格多边形边缘的数量。
ProcessInfo INFO_EDGE_CONNECTION_COUNT = 7
常数,以获得通过边缘接近度连接的导航网格多边形边缘的数量。
ProcessInfo INFO_EDGE_FREE_COUNT = 8
常数以获取无法合并但仍可通过边缘接近或链接连接的导航网格多边形边缘的数量。
ProcessInfo INFO_OBSTACLE_COUNT = 9
常数以获得活动导航障碍物的数量。
方法说明¶
创建代理。
bool agent_get_avoidance_enabled(agent: RID) const 🔗
如果提供的agent启用了避免,则返回true。
int agent_get_avoidance_layers(agent: RID) const 🔗
返回指定agent的avoidance_layers位掩码。
int agent_get_avoidance_mask(agent: RID) const 🔗
返回指定agent的avoidance_mask位掩码。
float agent_get_avoidance_priority(agent: RID) const 🔗
返回指定agent的avoidance_priority。
float agent_get_height(agent: RID) const 🔗
返回指定agent的高度。
RID agent_get_map(agent: RID) const 🔗
返回请求的agent当前分配给的导航地图RID。
int agent_get_max_neighbors(agent: RID) const 🔗
返回指定agent在导航中考虑的其他代理的最大数量。
float agent_get_max_speed(agent: RID) const 🔗
返回指定agent的最大速度。
float agent_get_neighbor_distance(agent: RID) const 🔗
返回指定agent在导航中考虑的到其他代理的最大距离。
bool agent_get_paused(agent: RID) const 🔗
如果指定的agent被暂停,则返回true。
Vector3 agent_get_position(agent: RID) const 🔗
返回指定agent在世界空间中的位置。
float agent_get_radius(agent: RID) const 🔗
返回指定agent的半径。
float agent_get_time_horizon_agents(agent: RID) const 🔗
返回由模拟计算的指定agent的速度相对于其他代理是安全的最小时间量。
float agent_get_time_horizon_obstacles(agent: RID) const 🔗
返回由模拟计算的指定agent的速度相对于静态回避障碍物是安全的最小时间量。
bool agent_get_use_3d_avoidance(agent: RID) const 🔗
如果提供的agent在3D空间Vector3(x, y,z)而不是水平2D Vector2(x,y)/Vector3(x,0.0,z)中使用回避,则返回true。
Vector3 agent_get_velocity(agent: RID) const 🔗
返回指定agent的速度。
bool agent_has_avoidance_callback(agent: RID) const 🔗
如果指定的agent具有回避回调,则返回true。
bool agent_is_map_changed(agent: RID) const 🔗
如果地图更改了前一帧,则返回true。
void agent_set_avoidance_callback(agent: RID, callback: Callable) 🔗
设置agent在每个避免处理步骤后调用的回调Callable。计算的safe_velocity将在物理计算之前与信号一起分派给对象。
注意:只要代理在导航地图上并且没有被释放,创建的回调总是独立于SceneTree状态进行处理。要禁用从代理发送回调,请再次使用agent_set_avoidance_callback(),并使用空的Callable。
void agent_set_avoidance_enabled(agent: RID, enabled: bool) 🔗
如果enabled为true,则提供的agent计算回避。
void agent_set_avoidance_layers(agent: RID, layers: int) 🔗
设置代理的avoidance_layers位掩码。
void agent_set_avoidance_mask(agent: RID, mask: int) 🔗
设置代理的avoidance_mask位掩码。
void agent_set_avoidance_priority(agent: RID, priority: float) 🔗
设置代理的avoidance_priority,priority在0.0(最低优先级)到1.0(最高优先级)之间。
指定的agent不会调整与avoidance_mask匹配但具有较低avoidance_priority的其他代理的速度。这反过来会使优先级较低的其他代理更多地调整其速度以避免与该代理发生冲突。
void agent_set_height(agent: RID, height: float) 🔗
更新提供的agentheight。
void agent_set_map(agent: RID, map: RID) 🔗
将代理放在地图中。
void agent_set_max_neighbors(agent: RID, count: int) 🔗
设置代理在导航中考虑的其他代理的最大数量。这个数字越大,模拟的运行时间越长。如果数字太低,模拟将不安全。
void agent_set_max_speed(agent: RID, max_speed: float) 🔗
设置代理的最大速度。必须是积极的。
void agent_set_neighbor_distance(agent: RID, distance: float) 🔗
设置此代理在导航中考虑的与其他代理的最大距离。此数字越大,模拟运行时间越长。如果数字太低,模拟将不安全。
void agent_set_paused(agent: RID, paused: bool) 🔗
如果paused为true,则不会处理指定的agent,例如计算回避速度或接收回避回调。
void agent_set_position(agent: RID, position: Vector3) 🔗
设置代理在世界空间中的位置。
void agent_set_radius(agent: RID, radius: float) 🔗
设置代理的半径。
void agent_set_time_horizon_agents(agent: RID, time_horizon: float) 🔗
模拟计算的代理速度相对于其他代理是安全的最小时间量。这个数字越大,这个代理对其他代理的存在做出反应的速度就越快,但是这个代理在选择速度方面的自由就越少。太高的值会大大减慢代理的运动。必须是积极的。
void agent_set_time_horizon_obstacles(agent: RID, time_horizon: float) 🔗
模拟计算的代理速度相对于静态回避障碍物是安全的最小时间量。这个数字越大,这个代理对静态回避障碍物的存在反应越快,但是这个代理在选择速度方面的自由度越小。太高的值会大大减慢代理的运动。必须是积极的。
void agent_set_use_3d_avoidance(agent: RID, enabled: bool) 🔗
设置代理是在启用回避时使用2D回避还是3D回避。
如果true,代理计算xyz轴的3D回避速度,例如在空中、水下或太空中进行的应用。3D使用代理仅避免使用代理的其他3D回避。3D使用代理仅对基于半径的回避障碍物做出反应。3D使用代理忽略任何基于顶点的障碍物。3D使用代理仅避免其他3D使用代理。
如果false,则代理沿xz轴计算回避速度,忽略y轴。2D使用代理仅避免其他2D使用代理的回避。2D使用代理对半径回避障碍物做出反应。2D使用代理对基于顶点的回避障碍物做出反应。2D使用代理仅避免其他2D使用代理。2D使用代理将忽略其他2D使用代理或低于其当前位置或高于其当前位置的障碍物,包括2D避免中的代理高度。
void agent_set_velocity(agent: RID, velocity: Vector3) 🔗
将velocity设置为指定agent的新所需速度。如果可能,回避模拟将尝试满足此速度,但会修改它以避免与其他代理和障碍物碰撞。当代理被传送到新位置时,也使用agent_set_velocity_forced()重置内部模拟速度。
void agent_set_velocity_forced(agent: RID, velocity: Vector3) 🔗
将避免碰撞模拟中的内部速度替换为指定agent的velocity。当代理被传送到新位置时,此函数应在同一帧中使用。如果频繁调用此函数,可能会使代理卡住。
void bake_from_source_geometry_data(navigation_mesh: NavigationMesh, source_geometry_data: NavigationMeshSourceGeometryData3D, callback: Callable = Callable()) 🔗
使用提供的navigation_mesh中的数据烘焙提供的source_geometry_data。该过程完成后,将调用可选的callback。
void bake_from_source_geometry_data_async(navigation_mesh: NavigationMesh, source_geometry_data: NavigationMeshSourceGeometryData3D, callback: Callable = Callable()) 🔗
将提供的navigation_mesh与提供的source_geometry_data中的数据一起烘焙为在后台线程上运行的异步任务。进程完成后,将调用可选的callback。
销毁给定的RID。
bool get_debug_enabled() const 🔗
当NavigationServer启用调试时返回true。
返回NavigationServer上所有创建的导航地图RID。这将返回2D和3D创建的导航地图,因为它们在技术上没有区别。
int get_process_info(process_info: ProcessInfo) const 🔗
返回有关NavigationServer当前状态的信息。有关可用状态的列表,请参阅ProcessInfo。
bool is_baking_navigation_mesh(navigation_mesh: NavigationMesh) const 🔗
当提供的导航网格在后台线程上烘焙时返回true。
在地图上的两个位置之间创建一个新链接。
bool link_get_enabled(link: RID) const 🔗
如果启用指定的link,则返回true。
Vector3 link_get_end_position(link: RID) const 🔗
返回此link的结束位置。
float link_get_enter_cost(link: RID) const 🔗
返回此link的输入成本。
RID link_get_map(link: RID) const 🔗
返回当前分配给请求的link的导航地图RID。
int link_get_navigation_layers(link: RID) const 🔗
返回此link的导航层。
int link_get_owner_id(link: RID) const 🔗
返回管理此链接的对象的ObjectID。
Vector3 link_get_start_position(link: RID) const 🔗
返回此link的起始位置。
float link_get_travel_cost(link: RID) const 🔗
返回此link的旅行成本。
bool link_is_bidirectional(link: RID) const 🔗
返回此link是否可以双向移动。
void link_set_bidirectional(link: RID, bidirectional: bool) 🔗
设置此link是否可以双向移动。
void link_set_enabled(link: RID, enabled: bool) 🔗
如果enabled为true,则指定的link将有助于其当前导航地图。
void link_set_end_position(link: RID, position: Vector3) 🔗
设置link的退出位置。
void link_set_enter_cost(link: RID, enter_cost: float) 🔗
设置此link的enter_cost。
void link_set_map(link: RID, map: RID) 🔗
设置链接的导航地图RID。
void link_set_navigation_layers(link: RID, navigation_layers: int) 🔗
设置链接的导航层。这允许从路径请求中选择链接(当使用map_get_path()时)。
void link_set_owner_id(link: RID, owner_id: int) 🔗
设置管理此链接的对象的ObjectID。
void link_set_start_position(link: RID, position: Vector3) 🔗
设置此link的入口位置。
void link_set_travel_cost(link: RID, travel_cost: float) 🔗
设置此link的travel_cost。
创建一个新地图。
void map_force_update(map: RID) 🔗
此函数立即强制指定导航mapRID的同步。默认情况下,导航地图仅在每个物理帧的末尾同步。此函数可用于立即(重新)计算导航地图的所有导航网格和区域连接。这使得可以立即在同一帧中查询更改地图的导航路径(如果需要,可以多次)。
由于技术限制,当前NavigationServer命令队列将被刷新。这意味着该物理帧的所有已经排队的更新命令都将被执行,即使是那些针对其他地图、区域和代理的命令,这些命令不属于指定地图。地图的导航网格和区域连接的昂贵计算将仅针对指定地图进行。其他地图将在物理帧结束时接收正常同步。如果指定地图在强制更新后收到更改,它也将在其他地图收到更新时再次更新。
safe_velocity信号的回避处理和分派不受此功能的影响,并且继续发生在物理框架末尾的所有映射和代理上。
注意:权力越大,责任越大。此功能只能由真正知道自己在做什么并有充分理由的用户使用。强制立即更新导航地图需要锁定NavigationServer并刷新整个NavigationServer命令队列。这不仅会严重影响应用的性能,而且如果使用不当,也会引入错误。
Array[RID] map_get_agents(map: RID) const 🔗
返回当前分配给请求的导航map的所有导航代理RID。
float map_get_cell_height(map: RID) const 🔗
返回用于在Y轴上光栅化导航网格顶点的地图单元格高度。
float map_get_cell_size(map: RID) const 🔗
返回用于光栅化XZ平面上的导航网格顶点的地图单元格大小。
Vector3 map_get_closest_point(map: RID, to_point: Vector3) const 🔗
返回导航map上最接近提供的to_point的导航网格表面点。
Vector3 map_get_closest_point_normal(map: RID, to_point: Vector3) const 🔗
返回导航map上最接近提供的to_point的导航网格表面法线。
RID map_get_closest_point_owner(map: RID, to_point: Vector3) const 🔗
返回导航map上最接近提供的to_point的导航网格表面点的所有者区域RID。
Vector3 map_get_closest_point_to_segment(map: RID, start: Vector3, end: Vector3, use_collision: bool = false) const 🔗
返回导航map上最接近提供的start和end段的导航网格表面点。
如果use_collision为true,则仅当线段与导航网格表面相交时才进行最近点测试。
float map_get_edge_connection_margin(map: RID) const 🔗
返回地图的边连接边距。此距离是连接来自不同区域的两条边所需的最小顶点距离。
int map_get_iteration_id(map: RID) const 🔗
返回导航地图的当前迭代id。每次导航地图更改和同步时,迭代id都会增加。迭代id为0表示导航地图从未同步过。
注意:迭代id在达到其范围限制后将回绕为1。
float map_get_link_connection_radius(map: RID) const 🔗
返回地图的链接连接半径。此距离是任何链接将搜索要连接的导航网格多边形的最大范围。
Array[RID] map_get_links(map: RID) const 🔗
返回当前分配给请求的导航map的所有导航链接RID。
float map_get_merge_rasterizer_cell_scale(map: RID) const 🔗
返回映射的内部合并光栅化单元比例。
Array[RID] map_get_obstacles(map: RID) const 🔗
返回当前分配给请求的导航map的所有导航障碍物RID。
PackedVector3Array map_get_path(map: RID, origin: Vector3, destination: Vector3, optimize: bool, navigation_layers: int = 1) 🔗
返回从原点到达目的地的导航路径。navigation_layers是路径中允许的所有区域导航层的位掩码。
Vector3 map_get_random_point(map: RID, navigation_layers: int, uniformly: bool) const 🔗
返回从匹配navigation_layers的所有地图区域多边形中选择的随机位置。
如果uniformly为true,则所有地图区域、多边形和面都按其表面积加权(较慢)。
如果uniformly为false,则只选择一个随机区域和一个随机多边形(更快)。
Array[RID] map_get_regions(map: RID) const 🔗
返回当前分配给请求的导航map的所有导航区域RID。
Vector3 map_get_up(map: RID) const 🔗
返回地图的向上方向。
bool map_get_use_async_iterations(map: RID) const 🔗
如果map同步使用在后台线程上运行的异步进程,则返回true。
bool map_get_use_edge_connections(map: RID) const 🔗
如果导航map允许导航区域使用边缘连接与导航地图边缘连接边距内的其他导航区域连接,则返回true。
bool map_is_active(map: RID) const 🔗
如果地图处于活动状态,则返回true。
void map_set_active(map: RID, active: bool) 🔗
将地图设置为活动状态。
void map_set_cell_height(map: RID, cell_height: float) 🔗
设置用于在Y轴上光栅化导航网格顶点的地图单元格高度。必须与使用的导航网格的单元格高度匹配。
void map_set_cell_size(map: RID, cell_size: float) 🔗
设置用于光栅化XZ平面上的导航网格顶点的地图单元格大小。必须与使用的导航网格的单元格大小匹配。
void map_set_edge_connection_margin(map: RID, margin: float) 🔗
设置用于焊接兼容区域边缘的映射边缘连接裕度。
void map_set_link_connection_radius(map: RID, radius: float) 🔗
设置地图的链接连接半径,用于将链接连接到导航多边形。
void map_set_merge_rasterizer_cell_scale(map: RID, scale: float) 🔗
设置用于控制合并灵敏度的地图内部合并光栅化单元比例。
void map_set_up(map: RID, up: Vector3) 🔗
设置地图向上方向。
void map_set_use_async_iterations(map: RID, enabled: bool) 🔗
如果enabled为true,则map同步使用在后台线程上运行的异步进程。
void map_set_use_edge_connections(map: RID, enabled: bool) 🔗
设置导航map边缘连接使用。如果enabled为true,则导航地图允许导航区域使用边缘连接与导航地图边缘连接边界附近的其他导航区域连接。
制造一个新的障碍。
bool obstacle_get_avoidance_enabled(obstacle: RID) const 🔗
如果提供的obstacle已启用回避,则返回true。
int obstacle_get_avoidance_layers(obstacle: RID) const 🔗
返回指定obstacle的avoidance_layers位掩码。
float obstacle_get_height(obstacle: RID) const 🔗
返回指定obstacle的高度。
RID obstacle_get_map(obstacle: RID) const 🔗
返回请求的obstacle当前分配给的导航地图RID。
bool obstacle_get_paused(obstacle: RID) const 🔗
如果指定的obstacle暂停,则返回true。
Vector3 obstacle_get_position(obstacle: RID) const 🔗
返回指定obstacle在世界空间中的位置。
float obstacle_get_radius(obstacle: RID) const 🔗
返回指定动态obstacle的半径。
bool obstacle_get_use_3d_avoidance(obstacle: RID) const 🔗
如果提供的obstacle在3D空间Vector3(x, y,z)而不是水平2D Vector2(x,y)/Vector3(x,0.0,z)中使用回避,则返回true。
Vector3 obstacle_get_velocity(obstacle: RID) const 🔗
返回指定动态obstacle的速度。
PackedVector3Array obstacle_get_vertices(obstacle: RID) const 🔗
返回指定obstacle的轮廓顶点。
void obstacle_set_avoidance_enabled(obstacle: RID, enabled: bool) 🔗
如果enabled为true,则提供的obstacle会影响使用代理的回避。
void obstacle_set_avoidance_layers(obstacle: RID, layers: int) 🔗
设置障碍物的avoidance_layers位掩码。
void obstacle_set_height(obstacle: RID, height: float) 🔗
设置obstacle的height。在3D中,代理将在使用2D回避时忽略高于或低于它们的障碍物。
void obstacle_set_map(obstacle: RID, map: RID) 🔗
将obstacle分配给导航地图。
void obstacle_set_paused(obstacle: RID, paused: bool) 🔗
如果paused为true,则不会处理指定的obstacle,例如影响避让速度。
void obstacle_set_position(obstacle: RID, position: Vector3) 🔗
更新obstacle在世界空间中的position。
void obstacle_set_radius(obstacle: RID, radius: float) 🔗
设置动态障碍物的半径。
void obstacle_set_use_3d_avoidance(obstacle: RID, enabled: bool) 🔗
设置obstacle是否在启用回避时使用2D回避或3D回避。
void obstacle_set_velocity(obstacle: RID, velocity: Vector3) 🔗
设置动态obstacle的velocity。允许其他代理更好地预测动态障碍物的运动。仅与障碍物的半径结合使用。
void obstacle_set_vertices(obstacle: RID, vertices: PackedVector3Array) 🔗
设置障碍物的轮廓顶点。如果顶点按顺时针顺序缠绕,代理将被障碍物推入,否则它们将被推出。
void parse_source_geometry_data(navigation_mesh: NavigationMesh, source_geometry_data: NavigationMeshSourceGeometryData3D, root_node: Item, callback: Callable = Callable()) 🔗
根据navigation_mesh的属性解析源几何的SceneTree。使用结果数据更新提供的source_geometry_data资源。然后可以使用该资源烘焙带有bake_from_source_geometry_data()的导航网格。该过程完成后,将调用可选的callback。
注意:此函数需要在主线程上运行或使用延迟调用,因为SceneTree不是线程安全的。
性能:虽然方便,但从Mesh资源读取数据数组会对帧率产生负面影响。需要从GPU接收数据,从而在进程中停止RenderingServer。为了性能,更喜欢使用例如碰撞形状或完全在代码中创建数据数组。
void query_path(parameters: NavigationPathQueryParameters3D, result: NavigationPathQueryResult3D, callback: Callable = Callable()) 🔗
查询给定导航地图中的路径。开始和目标位置以及其他参数通过NavigationPathQueryParameters3D定义。使用查询请求的其他结果中的路径更新提供的NavigationPathQueryResult3D结果对象。该过程完成后,将调用可选的callback。
void region_bake_navigation_mesh(navigation_mesh: NavigationMesh, root_node: Item) 🔗
已弃用: 由于核心多线程方面的更改,该方法已被弃用。更新现有代码时,请先创建一个 NavigationMeshSourceGeometryData3D 资源。将该资源与 parse_source_geometry_data() 结合使用来解析 SceneTree 以查找应有助于导航网格烘焙的节点。对 SceneTree 的解析需要在主线程进行。解析完成后,将该资源和 bake_from_source_geometry_data() 结合使用来烘焙导航网格。
使用从root_node开始收集的烘焙源几何体烘焙navigation_mesh。
创建一个新区域。
AABB region_get_bounds(region: RID) const 🔗
返回region转换后的导航网格的轴对齐边界框。
Vector3 region_get_closest_point(region: RID, to_point: Vector3) const 🔗
返回导航region上最接近提供的to_point的导航网格表面点。
Vector3 region_get_closest_point_normal(region: RID, to_point: Vector3) const 🔗
返回导航region上最接近提供的to_point的导航网格表面法线。
Vector3 region_get_closest_point_to_segment(region: RID, start: Vector3, end: Vector3, use_collision: bool = false) const 🔗
返回导航region上最接近提供的start和end段的导航网格表面点。
如果use_collision为true,则仅当线段与导航网格表面相交时才进行最近点测试。
Vector3 region_get_connection_pathway_end(region: RID, connection: int) const 🔗
返回连接门的结束点。connection是0和region_get_connections_count()的返回值之间的索引。
Vector3 region_get_connection_pathway_start(region: RID, connection: int) const 🔗
返回连接门的起始点。connection是0和region_get_connections_count()的返回值之间的索引。
int region_get_connections_count(region: RID) const 🔗
返回此region与地图中其他区域的连接数。
bool region_get_enabled(region: RID) const 🔗
如果启用指定的region,则返回true。
float region_get_enter_cost(region: RID) const 🔗
返回此region的输入成本。
RID region_get_map(region: RID) const 🔗
返回当前分配给请求的region的导航地图RID。
int region_get_navigation_layers(region: RID) const 🔗
返回区域的导航层。
int region_get_owner_id(region: RID) const 🔗
返回管理此区域的对象的ObjectID。
Vector3 region_get_random_point(region: RID, navigation_layers: int, uniformly: bool) const 🔗
返回从所有区域多边形中选择的具有匹配navigation_layers的随机位置。
如果uniformly为true,则所有区域多边形和面都按其表面积加权(较慢)。
如果uniformly为false,则只选择一个随机多边形和面(更快)。
Transform3D region_get_transform(region: RID) const 🔗
返回此region的全局转换。
float region_get_travel_cost(region: RID) const 🔗
返回此region的旅行成本。
bool region_get_use_edge_connections(region: RID) const 🔗
如果导航region设置为使用边缘连接与导航地图边缘连接边距内的其他导航区域连接,则返回true。
bool region_owns_point(region: RID, point: Vector3) const 🔗
如果世界空间中提供的point当前由提供的导航region拥有,则返回true。在此上下文中拥有意味着与也在提供区域的导航地图上注册的其他导航区域的所有其他导航网格相比,该区域的导航网格多边形面之一在离该点最近的距离处具有可能的位置。
如果多个导航网格的位置距离相等,则首先处理多边形的导航区域赢得所有权。多边形的处理顺序与导航区域在NavigationServer上注册的顺序相同。
注意:如果来自不同导航区域的导航网格重叠(通常应避免),结果可能不是预期的那样。
void region_set_enabled(region: RID, enabled: bool) 🔗
如果enabled为true,则指定的region将有助于其当前导航地图。
void region_set_enter_cost(region: RID, enter_cost: float) 🔗
设置此region的enter_cost。
void region_set_map(region: RID, map: RID) 🔗
设置区域的地图。
void region_set_navigation_layers(region: RID, navigation_layers: int) 🔗
设置区域的导航层。这允许从路径请求中选择区域(当使用map_get_path()时)。
void region_set_navigation_mesh(region: RID, navigation_mesh: NavigationMesh) 🔗
设置区域的导航网格。
void region_set_owner_id(region: RID, owner_id: int) 🔗
设置管理该区域的对象的ObjectID。
void region_set_transform(region: RID, transform: Transform3D) 🔗
设置该区域的全局转换。
void region_set_travel_cost(region: RID, travel_cost: float) 🔗
设置此region的travel_cost。
void region_set_use_edge_connections(region: RID, enabled: bool) 🔗
如果enabled为true,则导航region将使用边缘连接与导航地图边缘连接边距内的其他导航区域进行连接。
void set_active(active: bool) 🔗
控制此服务器的激活。
void set_debug_enabled(enabled: bool) 🔗
如果true在NavigationServer上启用调试模式。
PackedVector3Array simplify_path(path: PackedVector3Array, epsilon: float) 🔗
返回删除较少关键路径点的path的简化版本。简化量以世界为单位,由epsilon控制。简化使用Ramer-Douglas-Peucker算法的变体进行曲线点抽取。
路径简化有助于缓解某些代理类型和脚本行为可能出现的各种路径跟踪问题。
RID source_geometry_parser_create() 🔗
创建一个新的源几何解析器。如果使用source_geometry_parser_set_callback()为解析器设置了Callable,则将在使用parse_source_geometry_data()时为每个被解析的节点调用回调。
void source_geometry_parser_set_callback(parser: RID, callback: Callable) 🔗
为特定的源几何parser设置callbackCallable。Callable将接收具有以下参数的调用:
-navigation_mesh-用于定义解析设置的NavigationMesh引用。不要直接编辑或添加到导航网格。
-source_geometry_data-NavigationMeshSourceGeometryData3D引用。将用于导航网格烘焙的自定义源几何添加到此对象。
-node-被解析的Item。