Hello,
I am currently working on a game similar to skee ball, and my issue is that the ball moves very slowly through the air when falling. It looks like it weights almost nothing and no matter how high the mass is or how low the drag is it does not seem to change. Here are its rigid body specs,
Mass: 10,
Drag: 0.001,
Angular Drag: 0.05,
Use Gravity: true,
Is Kinematic: false,
Interpolate: none,
Collision Detection: Discrete,
Constraints: none.
Does anyone have any ideas why it still looks like its floating through the air? Any answers would be helpful.
Thanks.
yes but I can’t do that because other objects depend on gravity to be what it currently is. It would not be worth the work to change everything else just for this.
Thank you though.
I can tell you exactly what the problem is, but can only give you a vague answer as to how to remedy it.
The problem is that the physics engine does not account for terminal velocity (why I don't know, as it's a cornerstone to realistic physics).
It's true that real world gravity causes objects to fall at a rate of 9.8 meters per second. However, they also speed up by another 9.8 meters every second until they reach their own terminal velocity (or slow down, but we won't get into that).
An ideally weighty object with virtually no air resistance that has been falling for only 2 seconds will already be going a whopping 19.6 meters per second.
What you're seeing is that objects fall at exactly 9.8 meters per second and do not accelerate as they fall. This is a problem, because it means they look like they're going too slow, and you get floaty looking physics that are not physically accurate.
To remedy this, you would have to make some sort of script that roughly estimates an object's attributes by taking its mass and bounding box into account, and have this script apply proportional downward force over time to simulate the approach of terminal velocity (as well as knowing when to reset its force when it slows down due to whacking into something like a floor).
It sucks that there is no physics engine in existence that bothers to take into account such a rudimentary aspect of physics, but that's just the way it is, and you'll have to "roll your own" system for it.
If all you want is to make the ball fall faster, you can add a constant force element in addition to the gravity that’s automatically applied.
If you watch a marble drop from a desk it appears to be moving very quickly. It takes under a few seconds to reach the ground. If you drop a basketball from a building, it looks like it falls slower (because it takes more time to fall a greater distance). It could take more than a few seconds depending on the height of the building. If the Globe fell off of the Daily Planet’s office building, it would appear to be falling very slowly (because of the greater fall distance).
Change the scale of your physical object, and adjust your camera scale proportionally. Remember 1 Unit is 1 Meter in Unity’s Physics environment, so if you want an object to fall 1000 Meters, you are talking about the drop time of the globe falling from the top of the daily planet’s office building. If you want an object to fall 0.1 meters, then you are talking about a marble falling off of a stack of books, and will take much less time to fall.
Objects Accelerate properly in Unity. Just keep in mind how far you are dropping them, and how big they actually are in Units (Meters).