I am trying to make a button that is only viewable on mobile, that way mobile players can activate a keybind event. I have tried ContextActionService
, but the buttons are far to small for the player to hit. I want to know how to resize the context action buttons, or more preferably bind a custom GUI to the service. is there any way I can do this? (note, the GUI does not have to be binded to ContextActionService
. it just has to only be visible on mobile, I can script the rest )
You’re able to create a function that is both used by your own UI and ContextActionService.
As for making a UI visible on certain devices, such as mobile, here’s a quick reference to that.
local mobile = game:GetService("UserInputService").TouchEnabled and not KeyboardEnabled
if mobile then
--show mobile ui
else
-- not mobile
end
Mobile devices can have a keyboard connected to them via USB/Bluetooth etc.
the problem is that my custom UI shows on computers, and as @Forummer has said some mobile devices can be used for display and be hooked up to a keyboard and mouse.
If you have trouble setting the size/position of the CAS buttons you should check out this module, does all of that for you:
To make a custom mobile GUI you could do something like:
if not (UserInputService.KeyboardEnabled) or (UserInputService.GamepadEnabled) then --If player is on mobile
--Set up mobile gui
SomeMobileGui.MouseButton1Down:Connect(function()
Action() --Call action you want the button to perform
end)
end
I think ContextActionUtility is just what I need! Thanks for showing me this, I will add it to my game and if it works I will mark as solution!
hey, I have played around with ContextActionUtility a little and I keep getting the error Unable to cast value to function
. I do not know if you can help, but if you can this is my script:
local ContextActionUtility = require(game.ReplicatedStorage.ContextActionUtility)
local function TestFunc(actionName, inputState, inputObject)
print("hi")
end
ContextActionUtility.BindAction("Ability", TestFunc, true, Enum.KeyCode.E)
It’s a colon not a dot
local RepStorage = game:GetService("ReplicatedStorage")
local ContextActionUtility = require(RepStorage:WaitForChild("ContextActionUtility"))
local function TestFunc(actionName, inputState, inputObject)
print("hi")
end
ContextActionUtility:BindAction("Ability", TestFunc, true, Enum.KeyCode.E)
thanks! I am used to using a dot in custom modules I make lol.