# Rigidbody Rigidbody
Only objects with rigid body components will be displaced or rotated under the control of the physical system in the physical simulation stage.
Initially, the rigid body will be affected by gravity. The user can manually apply additional force to it in the script to control the movement of the rigid body.
# Important attributes and methods
Property name | Description |
---|---|
mass | The mass of a rigid body, used to calculate acceleration under force. |
inertiaTensor | The moment of inertia of a rigid body, which is used to calculate the rate of change of angular velocity under a moment of force. |
position | The position of the rigid body. **See [next section](#Rigid body position and rotation) for details. * |
rotation | The rotation of the rigid body. **See [next section](#Rigid body position and rotation) for details. * |
velocity | The linear velocity of the rigid body. |
angularVelocity | The angular velocity of the rigid body. |
isKinematic | Whether it is a kinematic rigid body. **See [Kinematics Rigid Body] (#Kinematics Rigid Body) for details. * |
Method name | Description |
---|---|
addForce | Apply force to a rigid body. |
wakeUp | Wake up the rigid body. *Refer to [Sleep State](#Sleep State) |
movePosition | Move kinematic rigid body. |
# Position and rotation of rigid body
In addition to the position and rotation on the Transform
on the node to which the rigid body component is attached, the rigid body component itself also has the position
and rotation
properties, which you may be confused about.
In fact, this may be a phenomenon unique to the mini game framework, because the physical system in the mini game framework is accelerated natively, and the node system and physical system cannot real-time share the position and rotation of objects . The timing of object position synchronization is actually at the beginning and end of each physics simulation.
# ▌Methods of moving rigid bodies in general
In order to make the rigid body look in line with the laws of physics, it is generally not recommended to manually modify the position of the Transform
or the position
of the rigid body.
You can consider using the addForce
method to apply a continuous force to the rigid body; or an explosive force to cause a sudden change in the speed of the rigid body.
# ▌When do I need to modify the position
of a rigid body?
If you want to make an object teleport, you only need to modify the position on the Transform
almost at any time.
But there are exceptions: if you want the manually modified position immediately to have an effect in the physical world (before the next physical simulation), for example, you want another physical character controller to be able to immediately In the process of move(), it is blocked by the moved rigid body, so you need to manually modify the rigid body's position.
# Kinematics Rigid Body
Sometimes you want to make the movement and rotation of the rigid body completely under your own control. At this time, you can turn on the isKinematic
property. The rigid body after it is turned on is called kinematic rigid body.
To understand a kinematic rigid body, you can equivalently regard a rigid body as an object with an infinite mass, so no force can cause it to accelerate; similarly, when a kinematic rigid body is moving, it can squeeze out any Other (non-kinematic) rigid bodies without any influence on themselves.
# ▌Kinematics movement of rigid body
Since a kinematic rigid body is not affected by force, there is no way to use addForce
to move like a normal rigid body.
If you want to make a kinematic rigid body teleport, you can directly modify the position of Transform
.
If you want a kinematic rigid body to move to a certain point along a straight line, you can call the movePosition
method.
# ▌The difference between a kinematic rigid body and a static collision body
Kinematic rigid bodies with collision bodies and static collision bodies without rigid bodies can collide with other (non-kinematic) rigid bodies without being affected. The two are almost identical in performance. To prevent confusion, here are the differences between the two:
- Kinematics rigid bodies can use
movePosition
, while static collision bodies can only teleport; - A kinematic rigid body can trigger a
Trigger
event with a static collider, but it cannot be triggered between two static colliders; - The kinematic rigid body is designed as a frequently moving object inside Physx, so the behavior of movement is optimized; if the static collision body frequently moves, the performance is relatively poor.
# Hibernation
If the kinetic energy of a rigid body is continuously less than a certain threshold, after several physical simulations, the rigid body will enter a sleep state to save performance.
In the dormant state, the rigid body will not actively move or rotate during the physical simulation phase. But it will participate in collision detection. If another rigid body collides with the dormant rigid body, the dormant rigid body will automatically wake up.
You can use the wakeUp
method to actively wake up a sleeping rigid body.
# Performance under the hierarchy
In principle, you should try to avoid the parent-child relationship between the nodes of the two rigid body components, otherwise unexpected situations may occur.
However, in actual use, it may be necessary to create a collision body for a certain part of the skeleton model to squeeze other collision bodies (or trigger Trigger events). You can use kinematic rigid body at this time.