ColliderObjectBase¶
派生: AreaTrigger, PhysicsBulkBase
三维物理对象的抽象基类。
描述¶
3D物理对象的抽象基类。ColliderObjectBase可以保存任意数量的Shape3D用于碰撞。每个形状必须分配给形状所有者。形状所有者不是节点,不会出现在编辑器中,而是可以通过使用shape_owner_*方法的代码访问。
警告:对于不均匀的比例,此节点可能不会按预期运行。建议在所有轴上保持其比例相同,并调整其碰撞形状。
属性¶
|
||
|
||
|
||
|
||
|
||
|
方法¶
信号¶
input_event(camera: Item, event: InputEvent, event_position: Vector3, normal: Vector3, shape_idx: int) 🔗
当对象接收到未处理的InputEvent时发出。event_position是鼠标指针在具有索引shape_idx的形状表面上的世界空间中的位置,normal是该点表面的法向量。
mouse_entered() 🔗
当鼠标指针进入该对象的任何形状时发出。要求input_ray_pickable为true,并至少设置一个collision_layer位。
注意:由于缺乏连续冲突检测,如果鼠标移动速度足够快并且ColliderObjectBase的区域很小,则此信号可能不会按预期顺序发出。如果另一个ColliderObjectBase与所讨论的ColliderObjectBase重叠,则此信号也可能不会发出。
mouse_exited() 🔗
当鼠标指针退出该对象的所有形状时发出。要求input_ray_pickable为true并至少设置一个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时,使身体保持静态。不影响AreaTrigger。PhysicsBulkBase在静态时不能受到力或其他物体的影响。
再次处理Item时自动将PhysicsBulkBase设置回其原始模式。
DisableMode DISABLE_MODE_KEEP_ACTIVE = 2
当Item.process_mode设置为Item.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()
定义Item.process_mode设置为Item.PROCESS_MODE_DISABLED时的物理行为。有关不同模式的更多详细信息,请参阅DisableMode。
bool input_capture_on_drag = false 🔗
如果true,则ColliderObjectBase将在鼠标拖动其形状时继续接收输入事件。
bool input_ray_pickable = true 🔗
如果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_pickable为true并至少设置一个collision_layer位。
void _mouse_enter() virtual 🔗
当鼠标指针进入该对象的任何形状时调用。要求input_ray_pickable为true并至少设置一个collision_layer位。请注意,在单个ColliderObjectBase中不同形状之间移动不会导致调用此函数。
void _mouse_exit() virtual 🔗
当鼠标指针退出此对象的所有形状时调用。要求input_ray_pickable为true,并至少设置一个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。
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。