npx skills add ...
npx skills add nonlooped/roblox-suite --skill roblox-physics
Build or debug Roblox vehicles, mechanisms, and moving objects. Use for assemblies, mechanical or mover constraints, network ownership, collision filtering, and simulation performance.
npx skills add nonlooped/roblox-suite --skill roblox-physics
Official sources:
Use mechanical constraints to connect parts and mover constraints to apply forces or velocity targets. For older code, use the BodyMover migration table below.
An assembly is one or more parts connected by rigid welds or movable joints, simulated as a single rigid body.
Key BasePart properties (same for any part in the assembly):
AssemblyLinearVelocity / AssemblyAngularVelocity: prefer constraints or ApplyImpulse over direct assignment for realistic motion.AssemblyCenterOfMass: force here produces pure linear acceleration.AssemblyMass: sum of all part masses; infinite if any part is anchored.AssemblyRootPart: automatically chosen root for replication and network ownership.Root-part priority: anchored > non-massless > higher RootPriority > size/name heuristics.
Use collision groups (Workspace:RegisterCollisionGroup (inherited from WorldRoot), BasePart.CollisionGroup) or NoCollisionConstraint for part-to-part filtering. CanCollide, CanTouch, and CanQuery control different behaviors; see references/collisions-and-filtering.md.
All mechanical constraints connect one or two Attachments (or Bones), except WeldConstraint and NoCollisionConstraint which use Part0/Part1.
| Constraint | Use case |
|---|---|
WeldConstraint | Rigidly lock two parts together, same relative transform |
RigidConstraint | Same as WeldConstraint but attachment-based, supports bones |
HingeConstraint | Doors, levers, rotating parts; motor/servo optional |
PrismaticConstraint | Sliding doors, elevators, pistons |
CylindricalConstraint | Slides + rotates, like hydraulic rams or landing gear |
SpringConstraint | Springs, shocks, suspension |
TorsionSpringConstraint | Rotational springs |
BallSocketConstraint | Shoulders, ball joints |
UniversalConstraint | Drive shafts, constant-velocity joints |
RopeConstraint | Cables, winches, maximum length |
RodConstraint | Fixed separation distance |
PlaneConstraint | Constrain motion to a plane |
NoCollisionConstraint | Disable collisions between two specific parts |
See references/mechanical-constraints.md for creation, orientation, motor/servo tuning, and limits.
Modern replacements for deprecated BodyMovers:
| Legacy | Modern | Use case |
|---|---|---|
BodyPosition | AlignPosition | Move attachment to a position or another attachment |
BodyGyro | AlignOrientation | Align orientation; LookAtPosition for tracking |
BodyVelocity | LinearVelocity | Maintain constant velocity along vector/line/plane |
BodyAngularVelocity | AngularVelocity | Maintain constant angular velocity |
BodyForce/BodyThrust | VectorForce | Apply constant force |
RocketPropulsion | LineForce + AlignOrientation | Follow + face target |
| - | Torque | Apply constant torque |
| - | LineForce | Force along line between two attachments |
| - | AnimationConstraint | Constraint driven by animation/transform |
See references/mover-constraints.md for force modes (Magnitude vs PerAxis), relativity frames, rigidity, and reaction forces.
BasePart:SetNetworkOwner(player) (server only). Reset with SetNetworkOwnershipAuto().Security: clients can exploit owned parts (teleport, fake collisions). Validate gameplay-critical events server-side. See references/network-ownership.md.
Assemblies stop simulating when still to save performance. They wake on collisions, property changes, impulses, or gravity/wind changes.
Workspace.PhysicsSteppingMethod:
Use the MicroProfiler to check island distribution.
| Roblox | Metric |
|---|---|
| 1 stud | 28 cm |
| 1 RMU | 21.952 kg |
| 196.2 studs/s² | default "Classic" gravity |
| 35 studs/s² | "Realistic" gravity (≈ 9.8 m/s²) |
See references/units-and-physical-properties.md.
BodyMovers instead of modern constraints.CFrame every frame instead of using forces/constraints.Touched events from client-owned parts for damage/authority.scripts/VehicleController.lua: chassis setup with HingeConstraint steering and motor drive, with client ownership and server validation.scripts/DoorHinge.lua: motorized/servo door with limits and state machine.scripts/PlatformMover.lua: AlignPosition + AlignOrientation platform with configurable waypoints.scripts/Suspension.lua: spring-damper suspension using SpringConstraint.