NavigationObstacle3D

继承: Node3D < Node < Object

用于导航的 3D 障碍物,能够将启用了避障处理的代理约束在某个区域之外或之内。

描述

导航中使用的 3D 障碍物,能够将由避障控制的代理约束在某个区域之外或之内。障碍物定义导航地图和轮廓顶点后才能正常工作。

如果障碍物的顶点使用顺时针顺序缠绕,则避障代理会被推入障碍物,否则避障代理就会被推出障碍物。轮廓必须不存在交叉和重叠。

障碍物不是(重新)烘焙导航网格的替代品。障碍物不会改变寻路的结果,障碍物只会修改避障代理的推荐速度,从而影响导航避障代理的移动。

使用顶点的障碍物可以传送至新位置,但不应该每一帧都移动,因为每次移动都需要重新构建避障地图。

教程

属性

bool

avoidance_enabled

true

int

avoidance_layers

1

float

height

1.0

float

radius

0.0

bool

use_3d_avoidance

false

Vector3

velocity

Vector3(0, 0, 0)

PackedVector3Array

vertices

PackedVector3Array()

方法

bool

get_avoidance_layer_value ( int layer_number ) const

RID

get_navigation_map ( ) const

RID

get_rid ( ) const

void

set_avoidance_layer_value ( int layer_number, bool value )

void

set_navigation_map ( RID navigation_map )


属性说明

bool avoidance_enabled = true

  • void set_avoidance_enabled ( bool value )

  • bool get_avoidance_enabled ( )

如果为 true,则该障碍物会影响使用代理的避障。


int avoidance_layers = 1

  • void set_avoidance_layers ( int value )

  • int get_avoidance_layers ( )

决定该障碍物的避障层的位字段。避障掩码中存在匹配位的代理会躲避该障碍物。


float height = 1.0

  • void set_height ( float value )

  • float get_height ( )

设置 2D 避障所使用的障碍物高度。使用 2D 避障的代理会忽略在其之上或之下的障碍物。


float radius = 0.0

  • void set_radius ( float value )

  • float get_radius ( )

设置该障碍物的避障半径。


bool use_3d_avoidance = false

  • void set_use_3d_avoidance ( bool value )

  • bool get_use_3d_avoidance ( )

如果为 true,则该障碍物会影响 3D 避障,使用的是代理的障碍物半径 radius

如果为 false,则该障碍物会影响 2D 避障,使用的是代理的障碍物顶点 vertices 和障碍物半径 radius


Vector3 velocity = Vector3(0, 0, 0)

设置该障碍物的期望速度,这样如果(每帧)一直使用相同的速度移动而不是直接跳到某个位置,那么其他代理就能够更好地预测该障碍物的行为。仅影响该障碍物 radius 的避障。不会影响障碍物的静态顶点。


PackedVector3Array vertices = PackedVector3Array()

该障碍物的轮廓顶点。如果这些顶点是按照顺时针顺序缠绕的,那么障碍物就会将其他代理向内推,否则就会向外推。轮廓不能交叉或重叠。如果这些顶点直接跳到了新的位置,那么其他代理可能无法预测这种行为,导致被困在障碍物内。


方法说明

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

Previous Next


© 版权所有 2014-present Juan Linietsky, Ariel Manzur and the Godot community (CC BY 3.0). Revision b1c660f7.

Built with Sphinx using a theme provided by Read the Docs.