Programming PhysX Worlds

For PhysX objects to be simulated, they must exist inside a world. Multiple worlds can have uses like the following:

  • To simulate the result of an action in the first world. For example, the second world might show what a tower of blocks might look like five seconds from now if it were knocked over in the first world.
  • To simulate a subset of objects that you don’t want to interact with the rest of the world. For example, you could simulate the movement of objects attached to a player’s belt.
  • To overcome hardware or software limits on a single large world. By tiling the single world into multiple smaller worlds and moving objects among them, you can create the illusion of a single large world.

World ID

Every world created in the PhysX gem is addressable by an ID of type AZ::Crc32. Use this ID to address the WorldRequestBus.

If you have a single world in your game, you can use BroadcastResult to invoke WorldRequestBus, as in the following example:

// Single world setup
RayCastHit choose;
WorldRequestBus::BroadcastResult(choose, &WorldRequests::RayCast, request);

If you have a multi-world game, use EventResult and pass in the world ID, as in the following example:

// Multiple world setup
RayCastHit choose;
WorldRequestBus::EventResult(choose, AZ_CRC("AZPhysicalWorld"), &WorldRequests::RayCast, request);
If your game creates multiple worlds, it must manage the objects that are added into those worlds.

Time step constants

You can configure step constants for Physics::WorldSettings when PhysXWorld is created. For more information, see PhysX System Global Configuration.