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 ( Node camera, InputEvent event, Vector3 position, Vector3 normal, int shape_idx )
当对象收到未处理的 InputEvent 时发出。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 时,不影响物理仿真。
属性说明¶
int collision_layer = 1
该 CollisionObject3D 所在的物理层。碰撞对象可以存在于 32 个不同层中的一层或多层。另见 collision_mask。
注意:只有当对象 B 位于对象 A 扫描的任何层中时,对象 A 才能检测到与对象 B 的接触。有关更多信息,请参阅文档中的《碰撞层和掩码》。
int collision_mask = 1
该 CollisionObject3D 扫描的物理层。碰撞对象可以扫描 32 个不同层中的一层或多层。另见 collision_layer。
注意:只有当对象 B 位于对象 A 扫描的任何层中时,对象 A 才能检测到与对象 B 的接触。有关更多信息,请参阅文档中的《碰撞层和掩码》。
float collision_priority = 1.0
发生穿透时用于解决碰撞的优先级。优先级越高,对物体的穿透度就越低。例如,可以用来防止玩家突破关卡的边界。
DisableMode disable_mode = 0
void set_disable_mode ( DisableMode value )
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 ( Camera3D camera, InputEvent event, Vector3 position, Vector3 normal, int shape_idx ) virtual
接收未处理的 InputEvent。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 ( Object owner )
为给定对象创建一个新的形状所有者。返回 owner_id
的新所有者,供将来引用。
bool get_collision_layer_value ( int layer_number ) const
返回 collision_layer 中是否启用了指定的层,给定的 layer_number
应在 1 和 32 之间。
bool get_collision_mask_value ( int layer_number ) const
返回 collision_mask 中是否启用了指定的层,给定的 layer_number
应在 1 和 32 之间。
RID get_rid ( ) const
返回对象的 RID。
PackedInt32Array get_shape_owners ( )
返回一个 owner_id
标识符的 Array。你可以在其他使用 owner_id
作为参数的方法中使用这些 ID。
bool is_shape_owner_disabled ( int owner_id ) const
如果为 true
,则禁用形状所有者及其形状。
void remove_shape_owner ( int owner_id )
移除给定形状的所有者。
void set_collision_layer_value ( int layer_number, bool value )
根据 value
,启用或禁用 collision_layer 中指定的层,给定的 layer_number
应在 1 和 32 之间。
void set_collision_mask_value ( int layer_number, bool value )
根据 value
,启用或禁用 collision_mask 中指定的层,给定的 layer_number
应在 1 和 32 之间。
int shape_find_owner ( int shape_index ) const
返回指定形状的 owner_id
。
void shape_owner_add_shape ( int owner_id, Shape3D shape )
向形状拥有者添加 Shape3D。
void shape_owner_clear_shapes ( int owner_id )
移除形状所有者的所有形状。
Object shape_owner_get_owner ( int owner_id ) const
返回给定形状所有者的父对象。
Shape3D shape_owner_get_shape ( int owner_id, int shape_id ) const
返回形状所有者中具有给定 ID 的 Shape3D。
int shape_owner_get_shape_count ( int owner_id ) const
返回给定形状所有者包含的形状数量。
int shape_owner_get_shape_index ( int owner_id, int shape_id ) const
返回形状所有者中具有给定 ID 的 Shape3D 的子索引。
Transform3D shape_owner_get_transform ( int owner_id ) const
返回形状所有者的 Transform3D。
void shape_owner_remove_shape ( int owner_id, int shape_id )
从给定的形状所有者中移除一个形状。
void shape_owner_set_disabled ( int owner_id, bool disabled )
如果为 true
,则禁用给定的形状所有者。
void shape_owner_set_transform ( int owner_id, Transform3D transform )
设置给定形状所有者的 Transform3D。