I’m having issues scripting the Jump button on Mobile devices.
I’ve tried the following:
elseif ui.TouchEnabled then
ui.InputBegan:Connect(function(input, game_processed_event)
if input.UserInputType == Enum.PlayerActions.CharacterJump then
activate()
end
end)
ui.InputEnded:Connect(function(input, game_processed_event)
if input.UserInputType == Enum.PlayerActions.CharacterJump then
deactivate()
end
end)
Unfortunately, the Enum doesn’t work on Mobile. Using a ScreenGUI as a button works fine, however a lot of players automatically press the Jump button expecting to use it so I need to figure out a way to script it.
Commonly, you would actually use the ContextActionService to do the input that way, but that’s more complex than UserInputService in general. On the other hand, working with it on UserInputService seems limited on trying to port it for mobile controls.
I checked every enumeration I could get in UserInputService, it is so far limited and doesn’t have any reliable methods for such.
game.Players.LocalPlayer.Character.Humanoid.StateChanged:Connect(function(state))
-- your code
end)
-- i know theres a event for if a stage has been changed, i kinda forgot that, you can check the devforum
-- if the humanoid state is falling (or jump idk i forgot) then activate,
-- if the humanoid state is not that, deactivate
Unfortunately, the StateChanged event does not work as expected. The player can press the button, but cannot hold it.
character.Humanoid.StateChanged:Connect(function(old_state, new_state)
if new_state == Enum.HumanoidStateType.Jumping then
activate()
elseif new_state == Enum.HumanoidStateType.Freefall then
deactivate()
end
end)
The activate function is called when the Jump button is pressed, however nothing happens when it is held down.
make a Boolean labled isJumpHold, on the state of jump, make a true and on freefall, make it false.
while loop checking is is isJumpHold is true then perform the action
also some changes
set the 2nd if to state ~= Enum.HumanoidStateType.Jumping