NavigationRegion3D

实验性: This class may be changed or removed in future versions.

继承: Node3D < Node < Object

可达的 3D 地区,NavigationAgent3D 能够将其用于寻路。

描述

可达的 3D 地区,基于 NavigationMeshNavigationAgent3D 能够将其用于寻路。

两个地区如果存在相近的边就可以互相连接。连接两条边所需的顶点最小间距可以通过 NavigationServer3D.map_set_edge_connection_margin 设置。

注意:两个地区存在重叠部分并不足以让它们相连。必须有相近的边。

从一个地区进入另一个地区的寻路成本可以使用 enter_cost 控制。

注意:起点位于该地区时,这个值不计入路径成本。

在该地区中行进的寻路成本可以使用乘数 travel_cost 控制。

注意:该节点会对这些属性进行缓存,因此,你在 NavigationServer3D 中对底层的地区 RID 进行的修改不会在该节点的属性中。

教程

属性

bool

enabled

true

float

enter_cost

0.0

int

navigation_layers

1

NavigationMesh

navigation_mesh

float

travel_cost

1.0

bool

use_edge_connections

true

方法

void

bake_navigation_mesh(on_thread: bool = true)

bool

get_navigation_layer_value(layer_number: int) const

RID

get_navigation_map() const

RID

get_region_rid() const

RID

get_rid() const

bool

is_baking() const

void

set_navigation_layer_value(layer_number: int, value: bool)

void

set_navigation_map(navigation_map: RID)


信号

bake_finished() 🔗

导航网格烘焙操作完成时发出通知。


navigation_mesh_changed() 🔗

NavigationMesh 发生变化时发出通知。


属性说明

bool enabled = true 🔗

  • void set_enabled(value: bool)

  • bool is_enabled()

决定该 NavigationRegion3D 是启用还是禁用。


float enter_cost = 0.0 🔗

  • void set_enter_cost(value: float)

  • float get_enter_cost()

当寻路从另一个区块的导航网格进入该区块的导航网格时,enter_cost 值将被加到路径距离,以确定最短路径。


int navigation_layers = 1 🔗

  • void set_navigation_layers(value: int)

  • int get_navigation_layers()

确定该区块所属的所有导航层的位字段。当使用 NavigationServer3D.map_get_path 请求一个路径时,可以检查这些导航层。


NavigationMesh navigation_mesh 🔗

使用的 NavigationMesh 资源。


float travel_cost = 1.0 🔗

  • void set_travel_cost(value: float)

  • float get_travel_cost()

当寻路在该区块的导航网格内移动时,将行进距离乘以 travel_cost 以确定最短路径。


bool use_edge_connections = true 🔗

  • void set_use_edge_connections(value: bool)

  • bool get_use_edge_connections()

如果启用,导航区块将使用边缘连接来与位于导航地图连接边距范围内的其他导航区块相连接。


方法说明

void bake_navigation_mesh(on_thread: bool = true) 🔗

烘焙该 NavigationMesh。如果 on_thread 被设置为 true(默认),则该烘焙将在单独的线程上完成。独立线程烘焙很有用,因为导航烘焙不是一项廉价的操作。完成后,它会自动设置新的 NavigationMesh。请注意,如果几何体是从网格解析而来的,则独立线程烘焙可能会非常慢,因为对每个网格的异步访问会涉及大量同步操作。另外,请注意在无法使用线程的操作系统(例如禁用线程的 Web)上,会自动禁用独立线程烘焙。


bool get_navigation_layer_value(layer_number: int) const 🔗

返回 navigation_layers 位掩码中指定的层是否启用,给定的 layer_number 应在 1 和 32 之间。


RID get_navigation_map() const 🔗

返回该区块使用的当前导航地图 RID


RID get_region_rid() const 🔗

已弃用: Use get_rid instead.

返回 NavigationServer3D 上该区块的 RID


RID get_rid() const 🔗

返回 NavigationServer3D 上该区块的 RID。结合 NavigationServer3D.map_get_closest_point_owner 可用于识别距离该合并导航地图上的点最近的 NavigationRegion3D


bool is_baking() const 🔗

NavigationMesh 正在后台线程上烘焙时返回 true


void set_navigation_layer_value(layer_number: int, value: bool) 🔗

根据 value,启用或禁用 navigation_layers 位掩码中指定的层,给定的 layer_number 应在 1 和 32 之间。


void set_navigation_map(navigation_map: RID) 🔗

设置该区块应使用的导航地图的 RID。默认情况下,该区块会自动加入 World3D 默认导航地图,因此该函数只需要覆盖默认地图即可。