AreaTrigger¶
继承: ColliderObjectBase < Item3D < Item < Object
检测其他ColliderObjectBase进入或退出它的3D空间区域。
描述¶
AreaTrigger是由一个或多个ColliderShape或ColliderPolygon子节点定义的3D空间区域。它检测其他ColliderObjectBase何时进入或退出它,它还跟踪哪些碰撞对象尚未退出它(即哪一个重叠它)。
该节点还可以在本地更改或覆盖物理参数(重力、阻尼)并将音频路由到自定义音频总线。
注意:使用PhysicsServer3D创建的区域和主体可能无法按预期与AreaTrigger交互,并且可能无法正确发出信号或跟踪对象。
警告:在此节点的ColliderShape子节点中使用ConcavePolygonShape3D(例如,通过使用Mesh菜单中的Create Triesh Collision Sible选项创建,该菜单在选择MeshRender节点时出现)可能会产生意想不到的结果,因为此碰撞形状是空心的。如果不需要,则必须将其拆分为多个ConvexPolygonShape3D或BoxShape3D等原始形状,或者在某些情况下可以用ColliderPolygon替换。
属性¶
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
方法¶
Array[AreaTrigger] | get_overlapping_areas() const |
|
get_overlapping_bodies() const |
|
has_overlapping_areas() const |
|
has_overlapping_bodies() const |
|
overlaps_area(area: Item) const |
|
overlaps_body(body: Item) const |
|
信号¶
area_entered(area: AreaTrigger) 🔗
当接收到的area进入该区域时发出。要求monitoring设置为true。
area_exited(area: AreaTrigger) 🔗
当接收到的area退出该区域时发出。需要将monitoring设置为true。
area_shape_entered(area_rid: RID, area: AreaTrigger, area_shape_index: int, local_shape_index: int) 🔗
当接收到的area中的Shape3D进入此区域的形状时发出。需要将monitoring设置为true。
local_shape_index和area_shape_index分别包含此区域和其他区域中相互作用的形状的索引。area_rid包含其他区域的RID。这些值可以与PhysicsServer3D一起使用。
示例:从形状索引中获取ColliderShape节点:
var other_shape_owner = area.shape_find_owner(area_shape_index)
var other_shape_node = area.shape_owner_get_owner(other_shape_owner)
var local_shape_owner = shape_find_owner(local_shape_index)
var local_shape_node = shape_owner_get_owner(local_shape_owner)
area_shape_exited(area_rid: RID, area: AreaTrigger, area_shape_index: int, local_shape_index: int) 🔗
当接收到的area的Shape3D退出该区域的形状时发出。需要将monitoring设置为true。
当接收到的body进入该区域时发出。body可以是PhysicsBulkBase或GridMap。如果GridMap配置了冲突形状,则检测到GridMap。需要将monitoring设置为true。
当接收到的body退出该区域时发出。body可以是PhysicsBulkBase或GridMap。如果GridMap配置了冲突形状,则检测到GridMap。需要将monitoring设置为true。
body_shape_entered(body_rid: RID, body: Item3D, body_shape_index: int, local_shape_index: int) 🔗
当接收到的body中的Shape3D进入此区域的形状时发出。body可以是PhysicsBulkBase或GridMap。如果它们的MeshLibrary已配置碰撞形状,则会检测到GridMap。需要将monitoring设置为true。
local_shape_index和body_shape_index分别包含此区域中相互作用的形状和相互作用的物体的索引。body_rid包含物体的RID。这些值可以与PhysicsServer3D一起使用。
示例:从形状索引中获取ColliderShape节点:
var body_shape_owner = body.shape_find_owner(body_shape_index)
var body_shape_node = body.shape_owner_get_owner(body_shape_owner)
var local_shape_owner = shape_find_owner(local_shape_index)
var local_shape_node = shape_owner_get_owner(local_shape_owner)
body_shape_exited(body_rid: RID, body: Item3D, body_shape_index: int, local_shape_index: int) 🔗
当接收到的body的Shape3D退出该区域的形状时发出。body可以是PhysicsBulkBase或GridMap。如果MeshLibrary配置了冲突形状,则检测到GridMap。需要将monitoring设置为true。
枚举¶
enum SpaceOverride: 🔗
SpaceOverride SPACE_OVERRIDE_DISABLED = 0
该区域不影响重力/阻尼。
SpaceOverride SPACE_OVERRIDE_COMBINE = 1
该区域将其重力/阻尼值添加到迄今为止计算的任何值(按priority顺序)。
SpaceOverride SPACE_OVERRIDE_COMBINE_REPLACE = 2
该区域将其重力/阻尼值添加到迄今为止计算的任何值(按priority顺序),忽略任何较低优先级的区域。
SpaceOverride SPACE_OVERRIDE_REPLACE = 3
此区域取代任何重力/阻尼,即使是默认值,忽略任何较低优先级的区域。
SpaceOverride SPACE_OVERRIDE_REPLACE_COMBINE = 4
该区域取代迄今为止计算的任何重力/阻尼(按priority顺序),但继续计算其余区域。
属性说明¶
物体在此区域停止旋转的速率。表示每秒损失的角速度。
有关阻尼的更多详细信息,请参见ProjectSettings.physics/3d/default_angular_damp。
SpaceOverride angular_damp_space_override = 0 🔗
void set_angular_damp_space_override_mode(value: SpaceOverride)
SpaceOverride get_angular_damp_space_override_mode()
此区域内角阻尼计算的覆盖模式。有关可能的值,请参阅SpaceOverride。
StringName audio_bus_name = &"Master" 🔗
void set_audio_bus_name(value: StringName)
StringName get_audio_bus_name()
该地区音频总线的名称。
bool audio_bus_override = false 🔗
如果true,则该区域的音频总线覆盖默认音频总线。
该区域的重力强度(单位为米/秒的平方)。该值乘以重力方向。这对于在不改变重力方向的情况下改变重力很有用。
Vector3 gravity_direction = Vector3(0, -1, 0) 🔗
区域的重力矢量(未归一化)。
如果true,则从一个点(通过gravity_point_center设置)计算重力。另见gravity_space_override。
Vector3 gravity_point_center = Vector3(0, -1, 0) 🔗
如果引力是一个点(见gravity_point),这将是吸引力点。
float gravity_point_unit_distance = 0.0 🔗
重力强度等于gravity的距离。例如,在半径100米、表面重力为4.0 m/s²的行星上,将gravity设置为4.0,将单位距离设置为100.0。根据平方反比定律,重力将发生衰减,因此在示例中,距离中心200米处,重力将为1.0 m/s²(距离的两倍,重力的1/4),在50米处,重力将为16.0 m/s²(距离的一半,重力的4倍),依此类推。
只有当单位距离为正数时,上述情况才成立。当此设置为0.0时,无论距离如何,重力都将是恒定的。
SpaceOverride gravity_space_override = 0 🔗
void set_gravity_space_override_mode(value: SpaceOverride)
SpaceOverride get_gravity_space_override_mode()
此区域内重力计算的覆盖模式。有关可能的值,请参阅SpaceOverride。
物体在此区域停止移动的速率。表示每秒损失的线速度。
有关阻尼的更多详细信息,请参见ProjectSettings.physics/3d/default_linear_damp。
SpaceOverride linear_damp_space_override = 0 🔗
void set_linear_damp_space_override_mode(value: SpaceOverride)
SpaceOverride get_linear_damp_space_override_mode()
此区域内线性阻尼计算的覆盖模式。有关可能的值,请参阅SpaceOverride。
如果true,其他监控区域可以检测到该区域。
如果true,则该区域检测进入和退出它的物体或区域。
区域的优先级。优先级较高的区域首先处理。World3D的物理总是在所有区域之后最后处理。
float reverb_bus_amount = 0.0 🔗
此区域将混响应用于其相关音频的程度。范围从0到1,精度为0.1。
bool reverb_bus_enabled = false 🔗
如果true,则该区域将混响应用于其关联的音频。
StringName reverb_bus_name = &"Master" 🔗
void set_reverb_bus_name(value: StringName)
StringName get_reverb_bus_name()
用于此区域关联音频的混响总线的名称。
float reverb_bus_uniformity = 0.0 🔗
该区域的混响是均匀效果的程度。范围从0到1,精度为0.1。
float wind_attenuation_factor = 0.0 🔗
风力随距离原点的距离而减小的指数率。
注意:此风力仅适用于SoftBulk节点。其他物理体目前不受风的影响。
float wind_force_magnitude = 0.0 🔗
区域特定风力的大小。
注意:此风力仅适用于SoftBulk节点。其他物理体目前不受风的影响。
ItemPath wind_source_path = ItemPath("") 🔗
用于指定特定区域风力的方向和原点的Item3D。方向与Item3D的局部变换的z轴相反,其原点是Item3D的局部变换的原点。
注意:此风力仅适用于SoftBulk节点。其他物理体目前不受风的影响。
方法说明¶
Array[AreaTrigger] get_overlapping_areas() const 🔗
返回相交的AreaTrigger的列表。重叠区域的ColliderObjectBase.collision_layer必须是该区域的ColliderObjectBase.collision_mask的一部分才能被检测到。
出于性能原因(所有冲突都在同一时间处理),此列表在物理步骤中修改一次,而不是在对象移动后立即修改。考虑改用信号。
Array[Item3D] get_overlapping_bodies() const 🔗
返回相交的PhysicsBulkBase和GridMap的列表。重叠主体的ColliderObjectBase.collision_layer必须是该区域的ColliderObjectBase.collision_mask的一部分才能被检测到。
出于性能原因(所有冲突都在同一时间处理),此列表在物理步骤中修改一次,而不是在对象移动后立即修改。考虑改用信号。
bool has_overlapping_areas() const 🔗
如果与任何AreaTrigger相交,则返回true,否则返回false。重叠区域的ColliderObjectBase.collision_layer必须是该区域的ColliderObjectBase.collision_mask的一部分才能被检测到。
出于性能原因(所有冲突都在同一时间处理),重叠区域列表在物理步骤中修改一次,而不是在对象移动后立即修改。考虑使用信号代替。
bool has_overlapping_bodies() const 🔗
返回true,如果与任何PhysicsBulkBase或GridMap相交,否则返回false。重叠主体的ColliderObjectBase.collision_layer必须是该区域的ColliderObjectBase.collision_mask的一部分才能被检测到。
出于性能原因(所有碰撞都在同一时间处理),重叠体列表在物理步骤中修改一次,而不是在对象移动后立即修改。考虑使用信号代替。
bool overlaps_area(area: Item) const 🔗
如果给定的AreaTrigger与此AreaTrigger相交或重叠,则返回true,否则返回false。
注意:此测试的结果在移动对象后不会立即出现。为了提高性能,重叠列表在每帧和物理步骤之前更新一次。考虑改用信号。
bool overlaps_body(body: Item) const 🔗
如果给定的物理体与此AreaTrigger相交或重叠,则返回true,否则返回false。
注意:此测试的结果在移动对象后不会立即出现。为了提高性能,重叠列表在每帧和物理步骤之前更新一次。考虑改用信号。
body参数可以是PhysicsBulkBase或GridMap实例。虽然GridMaps本身不是物理体,但它们将带有碰撞形状的图块注册为虚拟物理体。