Here’s what’s happening:
-
LinearVelocity overrides the velocity of the object. This means that if you have the velocity set to 0, your object will stay in place even if it’s in the air.
-
When this is the case, this LinearVelocity essentially acts as an AlignPosition, but at the current point the object is at. Your object will appear to be stuck in the same spot in the air.
-
Since your rocket model is bottom-heavy, gravity will affect the lower half of the rocket more. If your rocket is tilted, the lower part of the rocket will pull down with greater force compared to the top.
-
LinearVelocity doesn’t affect the angular momentum of the object, so your rocket enters a pendulum motion, swinging back and forth.
To demonstrate I did a quick test with a bottom-heavy model (metal part welded to the base) and LinearVelocity constraint set to 0 velocity.
Like @Razor_IB suggested, there are a few different solutions:
Solution 1
- Set the Attachment that your LinearVelocity is linked to’s Position to the exact centre of mass of the whole model.
VelocityAttachment.WorldPosition = rocket.PrimaryPart.AssemblyCenterOfMass
Solution 2
- Add an AlignOrientation constraint to your rocket. This will override the direction that your rocket is facing, so you can script it to control which way your rocket faces.
Solution 3 (a suggestion of mine)
- Create an invisible “Physics Root” part and weld it to the centre of your rocket. Set ALL of the other parts in the rocket to
Massless = true
. This one central part defines the mass of the whole object, which you can customise by changing the part’s CustomPhysicalProperties.
- Put your LinearVelocity & linked attachment inside this physics root part.
- This allows you to change the shape of your actual rocket, but the weight/centre of mass will not be affected.