scene_queries_shape_casting
Shape-casting (aka. sweep tests) is the big brother of ray-casting. The only difference with ray-cast is that instead of being a point travelling along a straight line, we have a complete shape travelling along a straight line. This is typically used for character controllers in games to determine by how much the player can move before it hits the environment.
Just like ray-casting, it is possible to control the behavior of the shape-casting like limiting the distance
travelled by the shape cast, and ignoring some colliders. See the details about the max_toi and
filter arguments in the ray-casting section.
There is only one shape-casting method: QueryPipeline::cast_shapeRapierContext::cast_shapeWorld.castShapeQueryPipeline::cast_rayRapierContext::cast_rayWorld.castRayray.origin) and
the linear velocity the shape is travelling at (this is analog to ray.dir):
- Example 2D
- Example 3D
<load path='/2d/rust/examples/rs_scene_queries2.rs' marker='Shapecast' />
<load path='/3d/rust/examples/rs_scene_queries3.rs' marker='Shapecast' />
- Example 2D
- Example 3D
<load path='/2d/bevy/examples/scene_queries2.rs' marker='Shapecast' />
<load path='/3d/bevy/examples/scene_queries3.rs' marker='Shapecast' />
- Example 2D
- Example 3D
<load path='/2d/javascript/src/snippets/scene_queries.ts' marker='Shapecast' />
<load path='/3d/javascript/src/snippets/scene_queries.ts' marker='Shapecast' />
The result of the shape-casting includes the handle of the first collider being hit, as well as detailed information about the geometry of the hit:
hit.toi: indicates the time of impact between the shape and the collider hit. This means that after travelling a distance ofshape_vel * hit.toi the collider and the cast shape are exactly touching. IfshapeVel * hit.toihit.toi == 0.0then the shape is already intersecting a collider at its initial position.hit.witness1: indicates the contact point when the cast shape and the collider are touching, expressed in the local-space of the collider hit by the shape.hit.witness2: indicates the contact point when the cast shape and the collider are touching, expressed in the local-space of the cast shape.hit.normal1: indicates the normal at the contact pointhit.witness1, expressed in the local-space of the collider hit by the shape.hit.normal2: indicates the normal at the contact pointhit.witness2, expressed in the local-space of the cast shape.