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...
CollisionObject3D
派生: Area3D, PhysicsBody3D
3D 物理对象的抽象基类。
描述
3D 物理对象的抽象基类。CollisionObject3D 能够容纳任意数量的 Shape3D 用作碰撞形状。每个形状必须分配给一个形状所有者。形状所有者不是节点,也不会出现在编辑器中,但可以通过代码使用 shape_owner_*
方法访问。
警告:如果使用非均一缩放,则该节点可能无法按预期工作。建议让所有轴上的缩放保持一致,可以用对碰撞形状的调整来代替非均一缩放。
属性
|
||
|
||
|
||
|
||
|
||
|
方法
信号
input_event(camera: Node, event: InputEvent, event_position: Vector3, normal: Vector3, shape_idx: int) 🔗
当对象收到未处理的 InputEvent 时发出。event_position
是鼠标指针在索引为 shape_idx
的形状表面上的世界空间位置,normal
是表面在该点的法向量。
mouse_entered() 🔗
当鼠标指针进入该对象的任何形状时发出。要求 input_ray_pickable 为 true
并且至少设置了一个 collision_layer 位。
注意:由于缺少连续的碰撞检测,如果鼠标移动得足够快并且 CollisionObject3D 的区域很小,则该信号可能不会按预期的顺序发出。如果另一个 CollisionObject3D 与所讨论的 CollisionObject3D 重叠,则也可能不会发出该信号。
mouse_exited() 🔗
当鼠标指针离开该对象的所有形状时发出。要求 input_ray_pickable 为 true
并且至少设置了一个 collision_layer 位。
注意:由于缺少连续的碰撞检测,如果鼠标移动得足够快并且 CollisionObject3D 的区域很小,则该信号可能不会按预期的顺序发出。如果另一个 CollisionObject3D 与所讨论的 CollisionObject3D 重叠,则也可能不会发出该信号。
枚举
enum DisableMode: 🔗
DisableMode DISABLE_MODE_REMOVE = 0
当 Node.process_mode 被设置为 Node.PROCESS_MODE_DISABLED 时,从物理仿真中移除,停止与此 CollisionObject3D 的所有物理交互。
当该 Node 再次被处理时,会自动重新加入到物理仿真中。
DisableMode DISABLE_MODE_MAKE_STATIC = 1
当 Node.process_mode 被设置为 Node.PROCESS_MODE_DISABLED 时,使实体静态化。不影响 Area3D。PhysicsBody3D 在静态时不会受到力或其他实体的影响。
当该 Node 再次被处理时,自动将 PhysicsBody3D 设置回其原始模式。
DisableMode DISABLE_MODE_KEEP_ACTIVE = 2
当 Node.process_mode 被设置为 Node.PROCESS_MODE_DISABLED 时,不影响物理仿真。
属性说明
该 CollisionObject3D 所在的物理层。碰撞对象可以存在于 32 个不同层中的一层或多层。另见 collision_mask。
注意:只有当对象 B 位于对象 A 扫描的任何层中时,对象 A 才能检测到与对象 B 的接触。有关更多信息,请参阅文档中的《碰撞层和掩码》。
该 CollisionObject3D 扫描的物理层。碰撞对象可以扫描 32 个不同层中的一层或多层。另见 collision_layer。
注意:只有当对象 B 位于对象 A 扫描的任何层中时,对象 A 才能检测到与对象 B 的接触。有关更多信息,请参阅文档中的《碰撞层和掩码》。
float collision_priority = 1.0
🔗
发生穿透时用于解决碰撞的优先级。优先级越高,对物体的穿透度就越低。例如,可以用来防止玩家突破关卡的边界。
DisableMode disable_mode = 0
🔗
void set_disable_mode(value: DisableMode)
DisableMode get_disable_mode()
定义 Node.process_mode 为 Node.PROCESS_MODE_DISABLED 时的物理行为。不同模式详见 DisableMode。
bool input_capture_on_drag = false
🔗
如果为 true
,则当鼠标拖过其形状时,CollisionObject3D 将继续接收输入事件。
bool input_ray_pickable = true
🔗
如果为 true
则可拾取该对象。可拾取的对象可以检测到鼠标指针的进入和离开,鼠标位于其中时会报告输入事件。要求至少设置一个 collision_layer 位。
方法说明
void _input_event(camera: Camera3D, event: InputEvent, event_position: Vector3, normal: Vector3, shape_idx: int) virtual 🔗
接收未处理的 InputEvent。event_position
是鼠标指针在索引为 shape_idx
的形状表面上的世界空间位置,normal
是该点表面的法向量。连接到 input_event 信号即可轻松获取这些事件。
注意:_input_event() 要求 input_ray_pickable 为 true
,并且至少要设置一个 collision_layer 位。
void _mouse_enter() virtual 🔗
当鼠标指针进入该实体的任何形状时调用。要求 input_ray_pickable 为 true
并且至少设置一个 collision_layer 位。请注意,在单个 CollisionObject3D 中的不同形状之间移动,不会导致该函数被调用。
void _mouse_exit() virtual 🔗
当鼠标指针离开该实体的所有形状时调用。要求 input_ray_pickable 为 true
并且至少设置一个 collision_layer 位。请注意,在单个 CollisionObject3D 中的不同形状之间移动,不会导致该函数被调用。
int create_shape_owner(owner: Object) 🔗
为给定对象创建一个新的形状所有者。返回 owner_id
的新所有者,供将来引用。
bool get_collision_layer_value(layer_number: int) const 🔗
返回 collision_layer 中是否启用了指定的层,给定的 layer_number
应在 1 和 32 之间。
bool get_collision_mask_value(layer_number: int) const 🔗
返回 collision_mask 中是否启用了指定的层,给定的 layer_number
应在 1 和 32 之间。
返回对象的 RID。
PackedInt32Array get_shape_owners() 🔗
返回一个 owner_id
标识符的 Array。你可以在其他使用 owner_id
作为参数的方法中使用这些 ID。
bool is_shape_owner_disabled(owner_id: int) const 🔗
如果为 true
,则禁用形状所有者及其形状。
void remove_shape_owner(owner_id: int) 🔗
移除给定形状的所有者。
void set_collision_layer_value(layer_number: int, value: bool) 🔗
根据 value
,启用或禁用 collision_layer 中指定的层,给定的 layer_number
应在 1 和 32 之间。
void set_collision_mask_value(layer_number: int, value: bool) 🔗
根据 value
,启用或禁用 collision_mask 中指定的层,给定的 layer_number
应在 1 和 32 之间。
int shape_find_owner(shape_index: int) const 🔗
返回指定形状的 owner_id
。
void shape_owner_add_shape(owner_id: int, shape: Shape3D) 🔗
向形状所有者添加 Shape3D。
void shape_owner_clear_shapes(owner_id: int) 🔗
移除形状所有者的所有形状。
Object shape_owner_get_owner(owner_id: int) const 🔗
返回给定形状所有者的父对象。
Shape3D shape_owner_get_shape(owner_id: int, shape_id: int) const 🔗
返回形状所有者中具有给定 ID 的 Shape3D。
int shape_owner_get_shape_count(owner_id: int) const 🔗
返回给定形状所有者包含的形状数量。
int shape_owner_get_shape_index(owner_id: int, shape_id: int) const 🔗
返回形状所有者中具有给定 ID 的 Shape3D 的子索引。
Transform3D shape_owner_get_transform(owner_id: int) const 🔗
返回形状所有者的 Transform3D。
void shape_owner_remove_shape(owner_id: int, shape_id: int) 🔗
从给定的形状所有者中移除一个形状。
void shape_owner_set_disabled(owner_id: int, disabled: bool) 🔗
如果为 true
,则禁用给定的形状所有者。
void shape_owner_set_transform(owner_id: int, transform: Transform3D) 🔗
设置给定形状所有者的 Transform3D。