Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
NavigationObstacle3D¶
用于导航的 3D 障碍物,能够将启用了避障处理的代理约束在某个区域之外或之内。
描述¶
导航中使用的 3D 障碍物,能够将由避障控制的代理约束在某个区域之外或之内。障碍物定义导航地图和轮廓顶点后才能正常工作。
如果障碍物的顶点使用顺时针顺序缠绕,则避障代理会被推入障碍物,否则避障代理就会被推出障碍物。轮廓必须不存在交叉和重叠。
障碍物不是(重新)烘焙导航网格的替代品。障碍物不会改变寻路的结果,障碍物只会修改避障代理的推荐速度,从而影响导航避障代理的移动。
使用顶点的障碍物可以传送至新位置,但不应该每一帧都移动,因为每次移动都需要重新构建避障地图。
教程¶
属性¶
|
||
|
||
|
||
|
||
|
||
|
||
|
方法¶
get_avoidance_layer_value ( int layer_number ) const |
|
get_navigation_map ( ) const |
|
get_rid ( ) const |
|
void |
set_avoidance_layer_value ( int layer_number, bool value ) |
void |
set_navigation_map ( RID navigation_map ) |
属性说明¶
bool avoidance_enabled = true
如果为 true
,则该障碍物会影响使用代理的避障。
int avoidance_layers = 1
决定该障碍物的避障层的位字段。避障掩码中存在匹配位的代理会躲避该障碍物。
float height = 1.0
设置 2D 避障所使用的障碍物高度。使用 2D 避障的代理会忽略在其之上或之下的障碍物。
float radius = 0.0
设置该障碍物的避障半径。
bool use_3d_avoidance = false
如果为 true
,则该障碍物会影响 3D 避障,使用的是代理的障碍物半径 radius。
如果为 false
,则该障碍物会影响 2D 避障,使用的是代理的障碍物顶点 vertices 和障碍物半径 radius。
Vector3 velocity = Vector3(0, 0, 0)
设置该障碍物的期望速度,这样如果(每帧)一直使用相同的速度移动而不是直接跳到某个位置,那么其他代理就能够更好地预测该障碍物的行为。仅影响该障碍物 radius 的避障。不会影响障碍物的静态顶点。
PackedVector3Array vertices = PackedVector3Array()
void set_vertices ( PackedVector3Array value )
PackedVector3Array get_vertices ( )
该障碍物的轮廓顶点。如果这些顶点是按照顺时针顺序缠绕的,那么障碍物就会将其他代理向内推,否则就会向外推。轮廓不能交叉或重叠。如果这些顶点直接跳到了新的位置,那么其他代理可能无法预测这种行为,导致被困在障碍物内。
方法说明¶
bool get_avoidance_layer_value ( int layer_number ) const
返回 avoidance_layers 位掩码中指定的层是否启用,给定的 layer_number
应在 1 和 32 之间。
RID get_navigation_map ( ) const
返回该 NavigationObstacle 节点的导航地图的 RID。该函数始终返回在 NavigationObstacle 节点上设置的地图,而不是 NavigationServer 上抽象障碍物所使用的地图。如果该障碍物地图使用 NavigationServer API 直接更改,则该 NavigationObstacle 节点将不会察觉该地图的更改。请使用 set_navigation_map 更改 NavigationObstacle 的导航地图,也会更新 NavigationServer 上的障碍物。
RID get_rid ( ) const
返回这个障碍物在 NavigationServer3D 上的 RID。
void set_avoidance_layer_value ( int layer_number, bool value )
根据 value
启用或禁用 avoidance_layers 位掩码中指定的层,给定的 layer_number
应在 1 和 32 之间。
void set_navigation_map ( RID navigation_map )
设置该 NavigationObstacle 节点应使用的导航地图的 RID,并会更新 NavigationServer 上的 obstacle
。