How to make object fall slowly but bounce normally?

I have been using Rigidbody drag to slow down my falling object (object falling down with graivity enabled in rigidbody). but using drag effects my objects bounciness too.

So, I am wondering is there any other way to slow down a falling object through which its bounciness is not effected?

This is whats happening with rigidbody.drag set to 4 |(the object is falling slow but it doesn’t bounce well):

And This is what I want to achieve(only with the bounciness), here rigidbody.drag is set to 1(the object is falling fast and bounces pretty well):

Thanks!

Is your intent to make the object fall slowly, but otherwise fall in a normal manner (i.e. accelerating at a constant rate) or is the idea to enforce an effective terminal velocity (using drag)?

If it’s the former, you can either turn down the global gravity or hijack the physics by implementing your own gravity value for an object, such as turning off an object’s gravity and using a line in FixedUpdate() like:

rigidbody.AddForce(Vector3.down * gravityForce, ForceMode.Acceleration);

If it’s the latter, you’re missing quite how simple of a drag calculation Unity/PhysX is using. The drag formula is a simple:

velocity = velocity * (1.0f - (Time.fixedDeltaTime * drag));

What this means in short is that if your drag value is the same as your physics framerate, your object stops moving every frame. With a drag value of 4 and an assumed default physics rate, your object is slowed to:

velocity *= (1.0f - (0.02f * 4.0f));
// 8% velocity loss per frame.
// 50 times per second.

or a terminal velocity of approximately 2.25630 magnitude with the default gravity of -9.81.

Once you hit the ground, then whether the momentum is maintained or not, the drag will have a significantly more noticeable impact on momentum against gravity, so you will barely see it bounce.

Edit: A heavy-handed alternative to enforce a maximum falling speed for an object would be to cap the rigidbody’s velocity.

@JaamiParvez As far as I understand the way the physics engine works, the bounciness of the object will depend on the acceleration it has at the moment of impact. If you slow down the way it falls, the force of the impact (and thus the force of the bounce) is smaller too. Right now the first idea I have (and it is very late here, so probably there are more/better ways to do it, but right now I can’t think of them) for this would be to :

1 - Make the rigidbody ignore completely the gravity, and calculate/apply it by yourself as a force (controllable with a public float variable so you can regulate how big is the acceleration/how strong is the gravity), then clamp the rigidbody velocity on the y axis (to make sure the object goes at a speed never higher than the one you want). 2 - When the object collides (OnCollisionEnter) multiply the velocity of the impact by X value (bounciness) by the mass of the object and apply it in the direction of the normal of the collision.

This way, you will have separate calculations for the gravity and bounciness, and you will be able to overload the bounciness part, making the bounce stronger than the actual impact.

Basically, you will need to calculate both the gravity and the bounciness by yourself, since the behavior you are aiming for does not follow the standard rules of physics. It can be done, but you will need to provide part of the math by yourself.

Hope it helps!