--- order: 2 title: Physics Manager type: Physics label: Physics --- The PhysicsScene ([PhysicsScene](/apis/core/#PhysicsScene)) manages all physics components in the scene and communicates with the physics backend, implementing global operations related to the PhysicsScene, such as updates and ray casting. In multi-scene projects, each [Scene](/apis/core/Scene) has its own PhysicsScene, and physics systems between Scenes are isolated and do not affect each other. ## Physics Update The PhysicsScene and rendering scene are independent but continuously synchronize their data during program execution. Therefore, like [scripts](/en/docs/script/script), the timing of synchronization is also very important. The update frequency of the PhysicsScene differs from the rendering scene and is controlled by the following parameter: ```typescript /** The fixed update time step (seconds) of the PhysicsScene */ fixedTimeStep: number = 1 / 60; ``` ### Update Mechanism - In each rendering frame, the physics engine updates according to the fixed time step [fixedTimeStep](/apis/core/#PhysicsScene-fixedTimeStep) - If the actual frame interval is greater than `fixedTimeStep`: - Multiple physics updates will be performed until catching up with the actual time - The maximum update time per frame is limited by `engine.time.maximumDeltaTime` - If the actual frame interval is less than `fixedTimeStep`, it accumulates to the next frame ### Physics Update Callback For physics component updates, you need to use a dedicated callback function in [scripts](/en/docs/script/script): ```typescript export class Script extends Component { /** * Called before physics calculations, the number of calls depends on the physics update frequency */ onPhysicsUpdate(): void {} } ``` The position of the physics update in the entire update process can be referred to in the figure below ### Internal Update Process of the Physics System The execution order when the PhysicsScene is updated: 1. Execute user logic in `onPhysicsUpdate` 2. `callColliderOnUpdate` synchronizes the modified [Entity](/apis/core/#Entity) `Transform` data to the physics collider 3. Update the PhysicsScene 4. `callColliderOnLateUpdate` synchronizes the updated positions of all [colliders](/en/docs/physics/collider/overview) to the corresponding `Entity` ## Setting Scene Gravity The PhysicsScene allows customization of gravity direction and magnitude. Gravity affects all [dynamic colliders](/en/docs/physics/collider/dynamicCollider) with gravity enabled in the scene. ```typescript // Get the gravity value of the PhysicsScene const gravity = scene.physics.gravity; // Modify gravity - set gravity to 0 scene.physics.gravity.set(0, 0, 0); // Modify gravity - set to Earth's gravitational acceleration (default value) scene.physics.gravity.set(0, -9.81, 0); ``` ## Spatial Query Functions The physics scene provides various spatial query functions for detecting and analyzing spatial relationships between objects in the scene: - **[Raycasting](/en/docs/physics/query/raycast)** - Precise point-to-point detection, suitable for picking and aiming scenarios - **[Shape Casting](/en/docs/physics/query/sweep)** - Cast geometric shapes along directions, suitable for movement prediction and path planning - **[Overlap Detection](/en/docs/physics/query/overlap)** - Detect overlapping objects within regions, suitable for triggers and area attacks