AreaTrigger

继承: ColliderObjectBase < Item3D < Item < Object

检测其他ColliderObjectBase进入或退出它的3D空间区域。

描述

AreaTrigger是由一个或多个ColliderShapeColliderPolygon子节点定义的3D空间区域。它检测其他ColliderObjectBase何时进入或退出它,它还跟踪哪些碰撞对象尚未退出它(即哪一个重叠它)。

该节点还可以在本地更改或覆盖物理参数(重力、阻尼)并将音频路由到自定义音频总线。

注意:使用PhysicsServer3D创建的区域和主体可能无法按预期与AreaTrigger交互,并且可能无法正确发出信号或跟踪对象。

警告:在此节点的ColliderShape子节点中使用ConcavePolygonShape3D(例如,通过使用Mesh菜单中的Create Triesh Collision Sible选项创建,该菜单在选择MeshRender节点时出现)可能会产生意想不到的结果,因为此碰撞形状是空心的。如果不需要,则必须将其拆分为多个ConvexPolygonShape3DBoxShape3D等原始形状,或者在某些情况下可以用ColliderPolygon替换。

属性

方法


信号

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_indexarea_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) 🔗

当接收到的areaShape3D退出该区域的形状时发出。需要将monitoring设置为true

另见area_shape_entered


body_entered(body: Item3D) 🔗

当接收到的body进入该区域时发出。body可以是PhysicsBulkBaseGridMap。如果GridMap配置了冲突形状,则检测到GridMap。需要将monitoring设置为true


body_exited(body: Item3D) 🔗

当接收到的body退出该区域时发出。body可以是PhysicsBulkBaseGridMap。如果GridMap配置了冲突形状,则检测到GridMap。需要将monitoring设置为true


body_shape_entered(body_rid: RID, body: Item3D, body_shape_index: int, local_shape_index: int) 🔗

当接收到的body中的Shape3D进入此区域的形状时发出。body可以是PhysicsBulkBaseGridMap。如果它们的MeshLibrary已配置碰撞形状,则会检测到GridMap。需要将monitoring设置为true

local_shape_indexbody_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) 🔗

当接收到的bodyShape3D退出该区域的形状时发出。body可以是PhysicsBulkBaseGridMap。如果MeshLibrary配置了冲突形状,则检测到GridMap。需要将monitoring设置为true

另见body_shape_entered


枚举

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顺序),但继续计算其余区域。


属性说明

float angular_damp = 0.1 🔗

  • void set_angular_damp(value: float)

  • float get_angular_damp()

物体在此区域停止旋转的速率。表示每秒损失的角速度。

有关阻尼的更多详细信息,请参见ProjectSettings.physics/3d/default_angular_damp


SpaceOverride angular_damp_space_override = 0 🔗

此区域内角阻尼计算的覆盖模式。有关可能的值,请参阅SpaceOverride


StringName audio_bus_name = &"Master" 🔗

该地区音频总线的名称。


bool audio_bus_override = false 🔗

  • void set_audio_bus_override(value: bool)

  • bool is_overriding_audio_bus()

如果true,则该区域的音频总线覆盖默认音频总线。


float gravity = 9.8 🔗

  • void set_gravity(value: float)

  • float get_gravity()

该区域的重力强度(单位为米/秒的平方)。该值乘以重力方向。这对于在不改变重力方向的情况下改变重力很有用。


Vector3 gravity_direction = Vector3(0, -1, 0) 🔗

  • void set_gravity_direction(value: Vector3)

  • Vector3 get_gravity_direction()

区域的重力矢量(未归一化)。


bool gravity_point = false 🔗

  • void set_gravity_is_point(value: bool)

  • bool is_gravity_a_point()

如果true,则从一个点(通过gravity_point_center设置)计算重力。另见gravity_space_override


Vector3 gravity_point_center = Vector3(0, -1, 0) 🔗

  • void set_gravity_point_center(value: Vector3)

  • Vector3 get_gravity_point_center()

如果引力是一个点(见gravity_point),这将是吸引力点。


float gravity_point_unit_distance = 0.0 🔗

  • void set_gravity_point_unit_distance(value: float)

  • float get_gravity_point_unit_distance()

重力强度等于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 🔗

此区域内重力计算的覆盖模式。有关可能的值,请参阅SpaceOverride


float linear_damp = 0.1 🔗

  • void set_linear_damp(value: float)

  • float get_linear_damp()

物体在此区域停止移动的速率。表示每秒损失的线速度。

有关阻尼的更多详细信息,请参见ProjectSettings.physics/3d/default_linear_damp


SpaceOverride linear_damp_space_override = 0 🔗

此区域内线性阻尼计算的覆盖模式。有关可能的值,请参阅SpaceOverride


bool monitorable = true 🔗

  • void set_monitorable(value: bool)

  • bool is_monitorable()

如果true,其他监控区域可以检测到该区域。


bool monitoring = true 🔗

  • void set_monitoring(value: bool)

  • bool is_monitoring()

如果true,则该区域检测进入和退出它的物体或区域。


int priority = 0 🔗

  • void set_priority(value: int)

  • int get_priority()

区域的优先级。优先级较高的区域首先处理。World3D的物理总是在所有区域之后最后处理。


float reverb_bus_amount = 0.0 🔗

  • void set_reverb_amount(value: float)

  • float get_reverb_amount()

此区域将混响应用于其相关音频的程度。范围从01,精度为0.1


bool reverb_bus_enabled = false 🔗

  • void set_use_reverb_bus(value: bool)

  • bool is_using_reverb_bus()

如果true,则该区域将混响应用于其关联的音频。


StringName reverb_bus_name = &"Master" 🔗

用于此区域关联音频的混响总线的名称。


float reverb_bus_uniformity = 0.0 🔗

  • void set_reverb_uniformity(value: float)

  • float get_reverb_uniformity()

该区域的混响是均匀效果的程度。范围从01,精度为0.1


float wind_attenuation_factor = 0.0 🔗

  • void set_wind_attenuation_factor(value: float)

  • float get_wind_attenuation_factor()

风力随距离原点的距离而减小的指数率。

注意:此风力仅适用于SoftBulk节点。其他物理体目前不受风的影响。


float wind_force_magnitude = 0.0 🔗

  • void set_wind_force_magnitude(value: float)

  • float get_wind_force_magnitude()

区域特定风力的大小。

注意:此风力仅适用于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 🔗

返回相交的PhysicsBulkBaseGridMap的列表。重叠主体的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,如果与任何PhysicsBulkBaseGridMap相交,否则返回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参数可以是PhysicsBulkBaseGridMap实例。虽然GridMaps本身不是物理体,但它们将带有碰撞形状的图块注册为虚拟物理体。