This happens when you hold down space bar to continuously jump and is more noticeable with certain settings.
You can see below on a custom character as well as a regular character that while holding down spacebar, additional jumps occur before the character touches the ground, and even gives them additional height.
I wonder if this is just a consequence of animations being slow to stop. Can you try jumping with the spider again, but this time with the jump animations disabled?
.Touched doesn’t work while holding jump due to this issue.
When holding the jump key on a part that uses the .Touched event it fails to fire most of the time and only fires when a player is walking or jumping at a very slow rate.
The code I used for printing ‘hit’ was:
script.Parent.Touched:Connect(function(hit)
local humanoid = hit.Parent:FindFirstChild("Humanoid")
if humanoid then
print("Hit!")
end
end)
I am assuming this has been a bug for a very long amount of time but as I usually don’t use .Touched I am unsure as to when this would’ve started.
This is still happening and allows players in my game to get to places they shouldn’t be able to, allows them to avoid touching hazards on the ground, and makes my game look broken in extreme cases.
I ran into this problem today and did some testing.
I did a small override on the default jump behavior, placing a mandatory 1 second delay before the player can jump, I won’t go into exactly how that was done but more or less it looks like this:
if jumpedRecently then
else
jumpedRecently = true
spawn(function()
self.humanoid.Jump = self.activeController:GetIsJumping() or (self.touchJumpController and self.touchJumpController:GetIsJumping())
wait(1)
jumpedRecently = false
end)
end
The problem still occurs, but instead of double jumping you get sporadic alternations between a normal jump and “messed up half jump.”
This tells us that the problem is most likely not related to how the input is being received but more so how the jump power is being delivered or calculated against the gravity.
tl;dr: After a small test, I think we can say with more clarity now, that this is more of a physics problem than an input issue.
The only feasible way to mitigate this is by adding a delay after each .Landed, and even then that can cause some unintended behavior
local Character = script.Parent
local Humanoid = Character:WaitForChild("Humanoid")
local onStateChanged = Humanoid.StateChanged:Connect(function(_,new)
if new == Enum.HumanoidStateType.Jumping then
Humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false)
task.delay(8, Humanoid.SetStateEnabled,Humanoid,Enum.HumanoidStateType.Jumping, true) -- Incase of Edge Cases
end
if new == Enum.HumanoidStateType.Landed then
task.delay(0.2, Humanoid.SetStateEnabled,Humanoid,Enum.HumanoidStateType.Jumping, true)
end
end)
Humanoid.Died:Once(function()
onStateChanged:Disconnect()
end)
As with touched events, I’ve found the issue comes more down to the glitched way TouchTransmitters react with the jumping animation rather than this bug, and the only way I can think of fixing this is either having another non-collideable part above or using a custom touched implementation (Both of course being headaches)
In my place, I have Gravity at 50 and JumpPower at 13.342. The character is able to jump before touches the ground, exactly as shown in the videos PeZsmistic shared. Really hoping this bug gets looked into by staff.
Somewhere in the five years between this being posted and now, the missing .Hit has been fixed for simple cases such as Touched on a baseplate with various gravity / jump height / rootpart dimensions. I’m not sure what’s different for me, maybe it’s the union, maybe it’s this character, maybe it’s my use of R6, but this still occurs in my game inconsistently. I will take a closer look after work later today.
This issue specifically occurs using R6 on a CanCollide == false part, and a HumanoidRootPart that is thin.
In this example, I have a simple client and server script printing “touched” when the spawn is touched. It has CanCollide turned off but CanTouch still turned on. The character has their HumanoidRootPart set to a height of 0.5 and HipHeight == 1. When I stop jumping, Touched is fired correctly. While I’m jumping consecutively, it is not.
I can put together a repro file if that would be helpful?
FWIW I understand that R6 is definitely not modern tech and might be hard to prio at this point, but my entire game is based around characters using it because of deadly quirks R15 has with respect to the character setup it expects, “panic sliding” the character undergoes when the rootpart hits the floor, and other assorted details I’m not prepared to tackle yet.
To use this, simply hold spacebar while standing over the spawn. After a few printouts, all Touched output will stop.
The character is simply an R6 character generated using the Rig Builder from the Avatar tab that I set up as a StarterCharacter. This character is unmodified except for the HumanoidRootPart having a height of 0.5. The StarterHumanoid is unmodified from default except for HipHeight set to 1. The spawn part is unmodified from the default baseplate except to have CanCollide turned off. Nothing else is changed.
Hey there - the fix for this ultimately proved to be unworkable due to concerns about affecting existing games. There’s a pretty easy workaround for this, though. If you add an invisible, non-collidable object that extends below the character, then that should set off the touch sensor.
Unfortunately this workaround does not work. I make a no collide part that is tall from the HRP down to a few studs below the character’s feet and there is no visible effect; this is the custom character that used to be in the dead gif in the OP, it is using only a regular Humanoid.