ColliderObjectBase

继承: Item3D < Item < Object

派生: AreaTrigger, PhysicsBulkBase

三维物理对象的抽象基类。

描述

3D物理对象的抽象基类。ColliderObjectBase可以保存任意数量的Shape3D用于碰撞。每个形状必须分配给形状所有者。形状所有者不是节点,不会出现在编辑器中,而是可以通过使用shape_owner_*方法的代码访问。

警告:对于不均匀的比例,此节点可能不会按预期运行。建议在所有轴上保持其比例相同,并调整其碰撞形状。

属性

方法

void

_input_event(camera: Camera, event: InputEvent, event_position: Vector3, normal: Vector3, shape_idx: int) virtual

void

_mouse_enter() virtual

void

_mouse_exit() virtual

int

create_shape_owner(owner: Object)

bool

get_collision_layer_value(layer_number: int) const

bool

get_collision_mask_value(layer_number: int) const

RID

get_rid() const

PackedInt32Array

get_shape_owners()

bool

is_shape_owner_disabled(owner_id: int) const

void

remove_shape_owner(owner_id: int)

void

set_collision_layer_value(layer_number: int, value: bool)

void

set_collision_mask_value(layer_number: int, value: bool)

int

shape_find_owner(shape_index: int) const

void

shape_owner_add_shape(owner_id: int, shape: 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

int

shape_owner_get_shape_count(owner_id: int) const

int

shape_owner_get_shape_index(owner_id: int, shape_id: int) const

Transform3D

shape_owner_get_transform(owner_id: int) const

void

shape_owner_remove_shape(owner_id: int, shape_id: int)

void

shape_owner_set_disabled(owner_id: int, disabled: bool)

void

shape_owner_set_transform(owner_id: int, transform: Transform3D)


信号

input_event(camera: Item, event: InputEvent, event_position: Vector3, normal: Vector3, shape_idx: int) 🔗

当对象接收到未处理的InputEvent时发出。event_position是鼠标指针在具有索引shape_idx的形状表面上的世界空间中的位置,normal是该点表面的法向量。


mouse_entered() 🔗

当鼠标指针进入该对象的任何形状时发出。要求input_ray_pickabletrue,并至少设置一个collision_layer位。

注意:由于缺乏连续冲突检测,如果鼠标移动速度足够快并且ColliderObjectBase的区域很小,则此信号可能不会按预期顺序发出。如果另一个ColliderObjectBase与所讨论的ColliderObjectBase重叠,则此信号也可能不会发出。


mouse_exited() 🔗

当鼠标指针退出该对象的所有形状时发出。要求input_ray_pickabletrue并至少设置一个collision_layer位。

注意:由于缺乏连续冲突检测,如果鼠标移动速度足够快并且ColliderObjectBase的区域很小,则此信号可能不会按预期顺序发出。如果另一个ColliderObjectBase与所讨论的ColliderObjectBase重叠,则此信号也可能不会发出。


枚举

enum DisableMode: 🔗

DisableMode DISABLE_MODE_REMOVE = 0

Item.process_mode设置为Item.PROCESS_MODE_DISABLED时,从物理模拟中删除以停止与此ColliderObjectBase的所有物理交互。

再次处理Item时自动重新添加到物理模拟中。

DisableMode DISABLE_MODE_MAKE_STATIC = 1

Item.process_mode设置为Item.PROCESS_MODE_DISABLED时,使身体保持静态。不影响AreaTriggerPhysicsBulkBase在静态时不能受到力或其他物体的影响。

再次处理Item时自动将PhysicsBulkBase设置回其原始模式。

DisableMode DISABLE_MODE_KEEP_ACTIVE = 2

Item.process_mode设置为Item.PROCESS_MODE_DISABLED时,不影响物理模拟。


属性说明

int collision_layer = 1 🔗

  • void set_collision_layer(value: int)

  • int get_collision_layer()

此CollisionObject3D位于中的物理层。碰撞对象可以存在于32个不同层中的一个或多个中。另请参见collision_mask

注意:只有当对象B位于对象A扫描的任何图层中时,对象A才能检测到与对象B的接触。有关详细信息,请参阅文档中的碰撞图层和掩码


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

这个CollisionObject3D扫描的物理层。碰撞对象可以扫描32个不同层中的一个或多个。另见collision_layer

注意:只有当对象B位于对象A扫描的任何图层中时,对象A才能检测到与对象B的接触。有关详细信息,请参阅文档中的碰撞图层和掩码


float collision_priority = 1.0 🔗

  • void set_collision_priority(value: float)

  • float get_collision_priority()

发生穿透时用于解决碰撞的优先级。优先级越高,对物体的穿透就越低。例如,这可以用来防止用户突破关卡的边界。


DisableMode disable_mode = 0 🔗

定义Item.process_mode设置为Item.PROCESS_MODE_DISABLED时的物理行为。有关不同模式的更多详细信息,请参阅DisableMode


bool input_capture_on_drag = false 🔗

  • void set_capture_input_on_drag(value: bool)

  • bool get_capture_input_on_drag()

如果true,则ColliderObjectBase将在鼠标拖动其形状时继续接收输入事件。


bool input_ray_pickable = true 🔗

  • void set_ray_pickable(value: bool)

  • bool is_ray_pickable()

如果true,则该对象是可拾取的。可拾取对象可以检测鼠标指针进入/离开,如果鼠标在其中,则报告输入事件。需要至少设置一个collision_layer位。


方法说明

void _input_event(camera: Camera, event: InputEvent, event_position: Vector3, normal: Vector3, shape_idx: int) virtual 🔗

接收未处理的InputEvents。event_position是鼠标指针在带有索引shape_idx的形状表面上的世界空间中的位置,normal是该点表面的法向量。连接到input_event信号以轻松拾取这些事件。

注:_input_event()要求input_ray_pickabletrue并至少设置一个collision_layer位。


void _mouse_enter() virtual 🔗

当鼠标指针进入该对象的任何形状时调用。要求input_ray_pickabletrue并至少设置一个collision_layer位。请注意,在单个ColliderObjectBase中不同形状之间移动不会导致调用此函数。


void _mouse_exit() virtual 🔗

当鼠标指针退出此对象的所有形状时调用。要求input_ray_pickabletrue,并至少设置一个collision_layer位。请注意,在单个ColliderObjectBase中不同形状之间移动不会导致调用此函数。


int create_shape_owner(owner: Object) 🔗

为给定对象创建一个新的形状所有者。返回新所有者的owner_id以供将来参考。


bool get_collision_layer_value(layer_number: int) const 🔗

返回collision_layer的指定层是否启用,给定介于1和32之间的layer_number


bool get_collision_mask_value(layer_number: int) const 🔗

返回collision_mask的指定层是否启用,给定介于1和32之间的layer_number


RID get_rid() const 🔗

返回对象的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中的指定层,给定1到32之间的layer_number


void set_collision_mask_value(layer_number: int, value: bool) 🔗

基于value,启用或禁用collision_mask中的指定层,给定1到32之间的layer_number


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