How to make character fall slower depending on gravity?

You can write your topic however you want, but you need to answer these questions:

  1. What do you want to achieve?
    I want to create a force that counteracts gravity whenever parachute is deployed. However, the gravity value can be changed at anytime.

  2. What is the issue?
    If I were to use the default gravity value, the player would fall slower. However, if I use the value of gravity similar to the Moon, then the player moves up.

  3. What solutions have you tried so far?
    I tried to use gravitational force calculation so that it adapts to changing gravity value. But it fails

local function deployPlayerParachute(Player)
	
	print("Parachute Deployed")
	
	local Character = Player.Character
	
	local parachuteHeightOffset = 13
	
	if Character then
		
		local HumanoidRootPart = Character:FindFirstChild("HumanoidRootPart")

		local Parachute = game.ReplicatedStorage:FindFirstChild("Parachute"):FindFirstChild("Parachute"):Clone()
		
		Parachute:PivotTo(CFrame.new(HumanoidRootPart.Position + Vector3.new(0, parachuteHeightOffset, 0)))
		
		local totalCharacterMass = getMassOfModel(Character)
		
		local gravitationalForce = (totalCharacterMass * workspace.Gravity)
		
		Parachute.Base.VectorForce.Force = Vector3.new(0, gravitationalForce, 0)
		
		Parachute.Parent = Character
	
		Parachute.Base.WeldConstraint.Part1 = HumanoidRootPart

		ParachuteFeedbackRemoteEvent:FireClient(Player, true)

		checkIfPlayerLandedWithParachute(Character)

	end
	
end
1 Like

possibly multiplying the force going down, put that in a variable and then apply the force so you fall slower

2 Likes

Here’s what worked for me in Studios.

local Character = script.Parent

Character:WaitForChild("HumanoidRootPart")

local function getMassOfCharacter(Charater)
	local totalMass = 0
	for i,v in pairs(Charater:GetDescendants()) do
		if not v:IsA("BasePart") then continue end
		totalMass += v.Mass
	end
	return totalMass
end

local newVectorForce = Instance.new("VectorForce", Character.HumanoidRootPart)
newVectorForce.RelativeTo = Enum.ActuatorRelativeTo.World

local Attachment0 = Instance.new("Attachment", Character.HumanoidRootPart)

newVectorForce.Attachment0 = Attachment0
newVectorForce.ApplyAtCenterOfMass = true


local k = .8
local Force = k * getMassOfCharacter(Character) * workspace.Gravity

newVectorForce.Force = Vector3.new(0, Force, 0)

Well my code is already similar to yours except that I put vectorforce directly to the part instead of creating it.

Ah thanks. I had forgotten about this. Though it still doesn’t really fix my problem.

Oh wait, I just realized I used Assembly mass instead of Mass.
My bad.
Now it works.
Marking this as solution.