collider_active_collision_types
By default, collision-detection is completely disabled between two colliders when both are attached to non-dynamic bodies.
Sometimes, it can be useful to enable collision-detection between, e.g., a collider attached to a kinematic rigid-body
and a collider attached to a fixed rigid-body. This can be done by modifying the collider's ActiveCollisionTypesR3_COLLISION_TYPES_* flags
/* Set the active collision types when the collider is created. */
let collider = ColliderBuilder::ball(0.5)
.active_collision_types(
ActiveCollisionTypes::default() | ActiveCollisionTypes::KINEMATIC_FIXED,
)
.build();
/* Set the active collision types after the collider creation. */
let collider = &mut world.colliders[collider_handle];
collider.set_active_collision_types(
ActiveCollisionTypes::default() | ActiveCollisionTypes::KINEMATIC_FIXED,
);
assert!(collider
.active_collision_types()
.contains(ActiveCollisionTypes::DYNAMIC_KINEMATIC));
assert!(collider
.active_collision_types()
.contains(ActiveCollisionTypes::KINEMATIC_FIXED));
/* Set the active collision types when the collider is created. */
commands
.spawn(Collider::ball(0.5))
.insert(ActiveCollisionTypes::default() | ActiveCollisionTypes::KINEMATIC_STATIC);
/* Set the active collision types inside of a system. */
fn modify_collider_active_collision_types(mut active_types: Query<&mut ActiveCollisionTypes>) {
for mut active_types in active_types.iter_mut() {
*active_types = ActiveCollisionTypes::default() | ActiveCollisionTypes::KINEMATIC_STATIC;
}
}
/* Set the active collision types when the collider is created. */
let colliderDesc = RAPIER.ColliderDesc.ball(0.5)
.setActiveCollisionTypes(RAPIER.ActiveCollisionTypes.DEFAULT |
RAPIER.ActiveCollisionTypes.KINEMATIC_FIXED);
let collider = world.createCollider(colliderDesc);
/* Set the active collision types after the collider creation. */
collider.setActiveCollisionTypes(RAPIER.ActiveCollisionTypes.DEFAULT |
RAPIER.ActiveCollisionTypes.KINEMATIC_FIXED);
/* Set the active collision types when the collider is created. */
R2ColliderDesc collider = r2BallColliderDesc(0.5);
collider.activeCollisionTypes = R2_COLLISION_TYPES_DEFAULT | R2_COLLISION_TYPES_KINEMATIC_FIXED;
/* Set the active collision types after the collider creation. */
r2Collider_SetActiveCollisionTypes(collider_handle,
R2_COLLISION_TYPES_DEFAULT | R2_COLLISION_TYPES_KINEMATIC_FIXED);
assert(r2Collider_ActiveCollisionTypes(collider_handle) & R2_COLLISION_TYPES_DYNAMIC_KINEMATIC);
assert(r2Collider_ActiveCollisionTypes(collider_handle) & R2_COLLISION_TYPES_KINEMATIC_FIXED);
# Set the active collision types when the collider is created.
collider = (
rp.Collider.ball(0.5)
.active_collision_types(
rp.ActiveCollisionTypes.default_types() | rp.ActiveCollisionTypes.KINEMATIC_FIXED
)
.build()
)
# Set the active collision types after the collider creation.
collider = world.colliders[collider_handle]
collider.active_collision_types = (
rp.ActiveCollisionTypes.default_types() | rp.ActiveCollisionTypes.KINEMATIC_FIXED
)
assert collider.active_collision_types.contains(rp.ActiveCollisionTypes.DYNAMIC_KINEMATIC)
assert collider.active_collision_types.contains(rp.ActiveCollisionTypes.KINEMATIC_FIXED)
info
To enable collision-detection between kinematic bodies and fixed bodies (as well as dynamic bodies), set its active collision types to:
ActiveCollisionTypes::default() | ActiveCollisionTypes::KINEMATIC_FIXED
ActiveCollisionTypes::default() | ActiveCollisionTypes::KINEMATIC_STATIC
RAPIER.ActiveCollisionTypes.DEFAULT | RAPIER.ActiveCollisionTypes.KINEMATIC_FIXED
R3_COLLISION_TYPES_DEFAULT | R3_COLLISION_TYPES_KINEMATIC_FIXED
rp.ActiveCollisionTypes.default_types() | rp.ActiveCollisionTypes.KINEMATIC_FIXED