BodyGyro
The BodyGyro object applies a torque (rotational force) on an assembly such that it maintains a constant angular displacement, or orientation. This allows for the creation of assemblies that point in a certain direction, as if a real gyroscope were acting upon it. Essentially, it's the rotational counterpart to a BodyPosition.
If you would like to maintain a constant angular velocity, use a BodyAngularVelocity instead.
The CFrame property controls the goal orientation. Only the angular components of the CFrame are used; position will make no difference. MaxTorque limits the amount of angular force that may be applied, P controls the power used in achieving the goal orientation, and D controls dampening behavior.
Summary
Properties
Determines the target orientation (translational component ignored).
Determines the amount of dampening to use in reaching the goal CFrame.
Determines the limit on how much torque that may be applied to each axis.
Determines how aggressive of a torque is applied in reaching the goal orientation.
Properties
CFrame
This property (not to be confused with BasePart.CFrame) determines the target orientation towards which torque will be exerted. Since BodyGyro does not apply translational force, the translational/positional component of the CFrame is ignored. Consider using one of the following CFrame constructors in setting this property: CFrame.fromAxisAngle(), CFrame.fromEulerAnglesXYZ(), or CFrame.fromEulerAnglesYXZ().
This property defines how much dampening will be applied to the torque used to reach the goal CFrame. When the assembly approaches the goal orientation, it needs to decelerate, otherwise it will rotate past the goal and have to stop and re-accelerate back toward the goal. This often creates an undesirable "rubber‑banding" effect, avoided by applying dampening. The higher this value is set, the greater the dampening curve becomes, or the slower the assembly will approach the goal orientation.