Infinite swing with SpringJoint

Hello,

I have a rigidbody connected to a spring joint, and that rigidbody can swing back and forth. This all works great, except as time goes on the rigidbody's velocity gets less and less. I have set the rigidbody's drag and angular drag to 0 and a damper force of 0 on the spring joint. Is there anything else that I need to set? I'd like the rigidbody to be able to swing forever.

If I have setup everything correctly and it's just a fact that the velocity is going to decrease, what is the best way to prevent this? I have thought of adding a very small force to the rigidbody whenever it changes directions, but I don't know how big of a force to add or even if that same magnitude of additional force will work with all springs.

Any advice is greatly appreciated.

Justin

Maybe give ConstantForce a try:

http://unity3d.com/support/documentation/ScriptReference/ConstantForce.html

The rigidbody might be losing energy due to "integration errors" in the physics time stepping.

In any case, I think, if you want to solve this in a nice way without movement artifacts, you will need to make some sort of semi-advanced "force applier".

For example, you could apply tangential force whose magnitude is proportional to the "height error" the last time the rigidbody changed direction. So if the height error is positive (it didn't reach the desired height), a positive force will be applied, proportional to the error. But if the height error was negative (the body overshot the desired height), the force applied will be negative, which means opposite direction.