Add torque is not behaving same in opposite Y direction. Need help!

Ok so I am comfortable with Unity but this is something weird for me.


What I am doing is

  1. Adding force in forward direction
  2. Then adding torque using AddTorque. But depending on where you click on the screen, I either do

AddTorque(transform.up*30) or AddTorque(-transform.up*30)

But the weird issue here is the negative torque is not producing the same rotation as the positive one. It just caps at a Y angular velocity of -0.09 where as the positive one keeps going higher uptil +1.5.

UPDATE: Found that gravity is causing this. If I disable use gravity then the torque behaves same either side. But how does gravity influence this?

please find the test project here. You can find it out for yourself - Open in Unity 2019.2.17 or higher


Anyone can help me out what the issue maybe here? Am I doing something wrong?

Sounds like a curious problem. I can’t provide any particular solution because this is out of my scope… but if you can’t figure it out I’ll try playing with it. I do have some suggestions to check however, if you haven’t tried them already and/or don’t know where to go.

Perhaps adding torque locally with AddRealtiveTorque would make a difference. If gravity is a modifier, maybe it’s the center of mass, or if it’s spinning against gravity it may have an intrinsic velocity. You could try using force modes, like ForceMode.VelocityChange or ForceMode.Acceleration which ignores mass.

 AddTorque(transform.up*30, ForceMode.VelocityChange);

Another option would be to re-write and mess with Rigidbody.AddForceAtPosition, which would create the negative or positive torque depending on what position/point you pick. Let me know if these suggestions get you absolutely anywhere.


Edit: Also, keep in mind rigidbody DOES have angularDrag, and maxAngularVelocity constraints.