EDIT: Thanks to the people who helped me get out of a problematic -and weird- situation! Thank you very much!
This is the script I'm using now:
local head = game.Players.LocalPlayer.Character:WaitForChild("Head", 60) local startPos = nil local endPos = nil local falling = false humanoid.Jumping:connect(function(active) if active == true then startPos = (head.Position.Y) falling = true while falling == true do if head.Position.Y > startPos then startPos = (head.Position.Y) end wait() end elseif active ~= true then falling = false endPos = (head.Position.Y) end end) humanoid.StateChanged:connect(function(state) if state == Enum.HumanoidStateType.Landed then falling = false endPos = (head.Position.Y) end end)
So, what i want is: I'm trying to get the Y position of the player's head when falling, then the head's Y position when landing, so I get the distance fallen.
So, imagine the player is standing on a high plataform, the player's head Y position when falling is 17, then the player's head Y position when landing on the baseplate is 4.5.
For some reason, The positions I get makes NO sense at all.
(NOTE: The following script is a LocalScript in StarterCharacterScripts. There will be another example after the following.)
Here's the example (with notes):
local head = game.Players.LocalPlayer.Character:WaitForChild("Head", 60) local startPos = nil --The position I'll get when the player begins to fall. local endPos = nil --The position I'll get when the player lands. local fallingDistance = nil --I'll do stuff to this later. humanoid.StateChanged:connect(function(state) if state == Enum.HumanoidStateType.Freefall then --When the player begins to fall: startPos = (head.CFrame.y) -- I'll get the falling position. (I tried head.Vector3.Y too...) print(startPos) -- For some reason THIS says the position of the head when falling is at ~4.3? elseif state == Enum.HumanoidStateType.Landed then --When the player lands: endPos = (head.CFrame.y) -- I'll get the landing position. print(endPos) -- THIS says that the position of the head is at ~4.2? fallingDistance = (startPos - endPos) print(fallingDistance) -- I often get NEGATIVE NUMBERS, so THIS is telling me the player is falling upwards??? end end)
Here's another example (without notes): (Keep reading, still stuff to clear down below.)
local head = game.Players.LocalPlayer.Character:WaitForChild("Head", 60) local startPos = nil local endPos = nil local fallingDistance = nil humanoid.StateChanged:connect(function(state) if state == Enum.HumanoidStateType.Freefall then startPos = (head.CFrame.y) -- Gets ~4.3 when FALLING. print(startPos) elseif state == Enum.HumanoidStateType.Landed then endPos = (head.CFrame.y) -- Gets ~4.2 when LANDING. print(endPos) fallingDistance = (startPos - endPos) print(fallingDistance) -- Sometimes this gives me negative numbers... end end)
If the head's position when falling from the plataform was 4.3, your feet would've been stuck in the baseplate, and the player would've been inside the plataform. (by logic.)
Hope someone figures this out... Have a nice day / night!
Hello!
You did everything right, you just forgot one critical thing: A CFrame is made of two Vector3s: A position and a lookVector. When you reference CFrame.y, you're referencing the y value of both the Position and Look Vector. To only reference the position, add a .p in between the CFrame and .y. So, your Y position will look like:
startPos = head.CFrame.p.y
Have an awesome time coding ;D
Here is what I think you should try.
local head = game.Players.LocalPlayer.Character:WaitForChild("Head", 60) local startPos = 0 local endPos = 0 local fallingDistance = 0 humanoid.FreeFalling:Connect(function(active) if active == true then startPos = (head.CFrame.y) print(startPos) else endPos = (head.CFrame.y) print(endPos) fallingDistance = (startPos - endPos) print(fallingDistance) end end)