Multiple physics contexts
Some projects may require multiple physics contexts. For example, a game with multiple levels may want to have a different physics context for each level. An AI-training project may want to simulate multiple physics contexts in parallel.
This page explains how to manage multiple physics contexts in Rapier.
Components
By default, on PreStartup
, bevy_rapier
spawns an entity with components needed for the RapierContext
QueryData, and mark it with the DefaultRapierContext
component,
so most users can forget about multiple contexts support and use "low boilerplate" accessors such as ReadRapierContext
.
If you don't want a default context to be spawned,
you can disable it using RapierContextInitialization
:
RapierPhysicsPlugin::<NoUserData>::default()
.with_custom_initialization(RapierContextInitialization::NoAutomaticRapierContext),
If you need multiple physics contexts, you can spawn them manually. Here is an example of how to spawn a new physics context:
let mut context = commands.spawn(RapierContextSimulation::default());
Any entity managed by a RapierContext
(colliders, joints, rigidbodies) has a RapierContextEntityLink
component attached to it. This component
can be used to retrieve its corresponding physics context.
Resources
bevy_rapier
uses a schedule
to parameterize its execution, this means all physics contexts share the same TimestepMode
resource:
all physics contexts execute at the same time, at the same rate.