I’m trying to make the character fall slowly at a consistent speed. I’ve looked all over the developer hub and the DevForum and have found nothing that works. I’ve tried using BodyForces and BodyVelocities but neither worked.
If anyone could point me in the right direction that would be appreciated.
The only thing I see this working is with BodyForce.
Apply a body force, to calculate the force you can use Newton’s second law.
F = ma, so if we have a gravitational force then we want to counter that.
local gravityAcceleration = Workspace.Gravity
F = part.Mass * gravityAcceleration
Now just apply the force value F in the opposite direction (up) and the speed should be constant as the resultant forces equal 0
Also, wrapping your expressions in parenthesis like that can circumvent constant folding. For the simplest bytecode I recommend grouping constants in parenthesis. For example: (2 * 0.5 * 196.2) * Mass would fold the constants and result in 196.2 * Mass, whereas your original expression would multiply 3 times.
In this case the 2 extra multiplies are insignificant relative to getting the character’s mass, but it’s still good practice.
Then in this case you’re going to want to apply a constant force to the player that is adjusted for velocity as such:
Put this in the humanoidRootPart in a server script, have a bindable event fire when the player’s parachute activates. I’m going to assume you called it “ParachuteEvent” and it’s parent is game.ReplicatedStorage
I do not know what’s causing that. I just ran the code in a game of my own and it works out fine. Are there any other forces you aren’t aware of? You also might want to consider chaning 0.8 to 0.1, as the force may be exceeding the mass.
I realised that your code only used the mass of the HumanoidRootPart, and the other code got the mass of the whole character. I fixed that and now it makes little to no difference. I’ve tried both 0.8 and 0.1. Here is my code:
local Force = game.ServerStorage.Other.ParachuteForce:Clone()
Force.Force = Vector3.new(0, (Plr.Character.PrimaryPart:GetMass() * workspace.Gravity) * 0.1, 0)
Force.Parent = Plr.Character.PrimaryPart
I’ve solved this by inserting a BodyVelocity into the parachute, setting the MaxForce to 0,100000,0, setting the power to 10000 and setting the velocity to 0,-10,0.
What I did for my parachuting system in Unity is I would have its local gravity be 0 then have it go on a downgrade force to the earth at a linear rate. Once it collided with anything the force was gone and its gravity was set to the normal one.