Area

Inherits: CollisionObject < Spatial < Node < Object

用于检测和物理及音频影响的3D区域。

描述

检测CollisionObject节点重叠、进入或退出的3D区域。还可以改变或覆盖局部物理参数(重力、阻尼),并将音频路由到自定义音频总线。

教程

属性

float

angular_damp

0.1

String

audio_bus_name

“Master”

bool

audio_bus_override

false

float

gravity

9.8

float

gravity_distance_scale

0.0

bool

gravity_point

false

Vector3

gravity_vec

Vector3( 0, -1, 0 )

float

linear_damp

0.1

bool

monitorable

true

bool

monitoring

true

float

priority

0.0

float

reverb_bus_amount

0.0

bool

reverb_bus_enable

false

String

reverb_bus_name

“Master”

float

reverb_bus_uniformity

0.0

SpaceOverride

space_override

0

方法

Array

get_overlapping_areas ( ) const

Array

get_overlapping_bodies ( ) const

bool

overlaps_area ( Node area ) const

bool

overlaps_body ( Node body ) const

信号

  • area_entered ( Area area )

当另一个 Area 进入这个 Area 时触发。需要将监控 monitoring 设置为 true

area 参数是另外一个 Area。


  • area_exited ( Area area )

当另一个区域退出这个区域时发出的。要求监控monitoring被设置为true

area参数是另外一个Area。


  • area_shape_entered ( RID area_rid, Area area, int area_shape_index, int local_shape_index )

当另一个区域的一个Shape进入这个区域的一个Shape时发出的。要求monitoring 被设置为true

area_rid PhysicsServer使用的其他区域的CollisionObjectRID

area 其他区域。

area_shape_index PhysicsServer使用的其他区域的Shape的索引。用area.shape_owner_get_owner(area_shape_index)获得CollisionShape节点。

local_shape_indexPhysicsServer使用的该区域的Shape的索引。用self.shape_owner_get_owner(local_shape_index)获得CollisionShape节点。


  • area_shape_exited ( RID area_rid, Area area, int area_shape_index, int local_shape_index )

当另一个区域的一个Shape进入这个区域的一个Shape时发出的。要求monitoring 被设置为true

area_rid PhysicsServer使用的其他区域的CollisionObjectRID

area 其他区域。

area_shape_index PhysicsServer使用的其他区域的Shape的索引。用area.shape_owner_get_owner(area_shape_index)获得CollisionShape节点。

local_shape_indexPhysicsServer使用的该区域的Shape的索引。用self.shape_owner_get_owner(local_shape_index)获得CollisionShape节点。


  • body_entered ( Node body )

PhysicsBodyGridMap进入这个区域时发出的。需要将监控monitoring设置为true。如果MeshLibrary有碰撞形状Shape,就会检测到GridMap

body, 如果它存在于场景树中, 是另一个PhysicsBodyGridMap节点Node


  • body_exited ( Node body )

PhysicsBodyGridMap离开这个Area时发出的。需要将监控monitoring设置为true。如果MeshLibrary有碰撞形状Shape,就会检测到GridMap

body, 如果它存在于场景树中, 是其他PhysicsBodyGridMapNode


  • body_shape_entered ( RID body_rid, Node body, int body_shape_index, int local_shape_index )

PhysicsBodyGridMap的一个Shape进入这个区域的一个Shape时触发。需要将monitoring设置为true。如果MeshLibrary有碰撞Shape,就会检测到GridMap

body_rid PhysicsServer使用的PhysicsBodyMeshLibraryCollisionObjectRID

body PhysicsBodyGridMapNode,如果它存在于树中的话。

body_shape_index PhysicsServer使用的PhysicsBodyGridMapShape的索引。用body.shape_owner_get_owner(body_shape_index)获取CollisionShape节点。

local_shape_index这个区域的Shape的索引,由PhysicsServer使用。用self.shape_owner_get_owner(local_shape_index)获得CollisionShape节点。


  • body_shape_exited ( RID body_rid, Node body, int body_shape_index, int local_shape_index )

PhysicsBodyGridMap的一个Shape进入这个区域的一个Shape时触发。需要将monitoring设置为true。如果MeshLibrary有碰撞Shape,就会检测到GridMap

body_rid PhysicsServer使用的PhysicsBodyMeshLibraryCollisionObjectRID

body PhysicsBodyGridMapNode,如果它存在于树中的话。

body_shape_index PhysicsServer使用的PhysicsBodyGridMapShape的索引。用body.shape_owner_get_owner(body_shape_index)获取CollisionShape节点。

local_shape_index这个区域的Shape的索引,由PhysicsServer使用。用self.shape_owner_get_owner(local_shape_index)获得CollisionShape节点。

枚举

enum SpaceOverride:

  • SPACE_OVERRIDE_DISABLED = 0 —- 这个区域不影响重力/阻尼。

  • SPACE_OVERRIDE_COMBINE = 1 —- 该区域将其重力/阻尼值加到迄今为止计算出的任何值上(按 priority 排序)。

  • SPACE_OVERRIDE_COMBINE_REPLACE = 2 —- 该区域将其重力/阻尼值添加到到目前为止已计算的任何内容(按 priority 顺序),而忽略任何较低优先级的区域。

  • SPACE_OVERRIDE_REPLACE = 3 —- 该区域将替换所有重力/阻尼,甚至是默认值,而忽略任何较低优先级的区域。

  • SPACE_OVERRIDE_REPLACE_COMBINE = 4 —- 这个区域取代了到目前为止计算出的任何重力/阻尼(按 priority 顺序),但继续计算其余的区域。

属性说明

Default

0.1

Setter

set_angular_damp(value)

Getter

get_angular_damp()

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

关于阻尼的更多细节,见ProjectSettings.physics/3d/default_angular_damp


Default

“Master”

Setter

set_audio_bus(value)

Getter

get_audio_bus()

该区域音频总线的名称。


  • bool audio_bus_override

Default

false

Setter

set_audio_bus_override(value)

Getter

is_overriding_audio_bus()

true 时该区域的音频总线将覆盖默认的音频总线。


Default

9.8

Setter

set_gravity(value)

Getter

get_gravity()

该区域内的重力强度(单位:m/s^2)。这个值是重力向量的倍数。这个量在改变引力大小而不改变其方向很有用。


  • float gravity_distance_scale

Default

0.0

Setter

set_gravity_distance_scale(value)

Getter

get_gravity_distance_scale()

点重力的衰减系数。该值越大,重力值随距离下降的速度就越快。


Default

false

Setter

set_gravity_is_point(value)

Getter

is_gravity_a_point()

如果 true,则从一个点计算重力(通过 gravity_vec 设置)。参阅 space_override


Default

Vector3( 0, -1, 0 )

Setter

set_gravity_vector(value)

Getter

get_gravity_vector()

区域的未归一化的重力向量。如果重力作用在一个点上,则它将是引力点。请参阅 gravity_point


Default

0.1

Setter

set_linear_damp(value)

Getter

get_linear_damp()

物体在此区域减速的速率。代表每秒损失的线速度。

关于阻尼的更多细节,见ProjectSettings.physics/3d/default_linear_damp


Default

true

Setter

set_monitorable(value)

Getter

is_monitorable()

true 时其他监测区域可以检测到这个区域。


Default

true

Setter

set_monitoring(value)

Getter

is_monitoring()

true 时该区域能够检测到进入和退出该区域的实体或区域。


Default

0.0

Setter

set_priority(value)

Getter

get_priority()

该区域的优先级。将优先处理优先级较高的区域。


Default

0.0

Setter

set_reverb_amount(value)

Getter

get_reverb_amount()

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


  • bool reverb_bus_enable

Default

false

Setter

set_use_reverb_bus(value)

Getter

is_using_reverb_bus()

true 时该区域会将混响应用于其相关音频。


Default

“Master”

Setter

set_reverb_bus(value)

Getter

get_reverb_bus()

该区域的相关音频要使用的混响总线名称。


  • float reverb_bus_uniformity

Default

0.0

Setter

set_reverb_uniformity(value)

Getter

get_reverb_uniformity()

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


Default

0

Setter

set_space_override_mode(value)

Getter

get_space_override_mode()

该区域内重力和阻尼计算的覆盖模式。可能的值见SpaceOverride

方法说明

  • Array get_overlapping_areas ( ) const

返回相交的Area的列表。重叠区域的CollisionObject.collision_layer必须是这个区域CollisionObject.collision_mask的一部分,这样才能被检测到。

出于性能的考虑,因碰撞都是同时处理的,这个列表在物理步骤中只修改一次,而不是在物体被移动后立即修改。考虑使用信号来代替。


  • Array get_overlapping_bodies ( ) const

返回相交的PhysicsBody的列表。重叠物体的CollisionObject.collision_layer必须是这个区域CollisionObject.collision_mask的一部分,这样才能被检测到。

出于性能的考虑,因碰撞都是同时处理的,这个列表在物理步骤中只修改一次,而不是在物体被移动后立即修改。考虑使用信号来代替。


如果 true,则给定区域与该区域重叠.

注意:在移动物体后,这个测试的结果不是即时的。为了性能,重叠列表在每一帧和物理步骤之前更新一次。可以考虑用信号代替。


如果为true,则给定的物理体与该区域重叠.

注意:在移动物体后,这个测试的结果不是即时的。为了提高性能,重叠列表在每一帧和物理步骤之前更新一次。可以考虑使用信号来代替。

body参数可以是一个PhysicsBody或一个GridMap实例(虽然GridMaps本身不是物理体,但它们用碰撞形状注册它们的瓦片(tiles)作为一个虚拟物理体)。