I think there’s a bug either in the emulator or the virtual cursor. It only moves the “virtual position” when the direction of the joystick changes, not each frame. We can clearly see this happening in this video:
There’s also another bug where pressing Q (or the “select” button keybind) will bring up the virtual cursor, but then the virtual cursor would reset each time another keybind related to moving the joystick gets pressed. We also can’t turn off the virtual cursor using keybinds. Here’s a demonstration:
After toggling on the controller emulator, and pressing play (f5) in studio, UserInputService.GamepadEnabled is true, with of course the keybinds being mapped to controller buttons. Which is to be expected…
So when stopping the playtest, and clicking the controller emulator icon again, the widget disappears, which I’d assume is turning the controller emulator off.
BUT despite having the widget not showing or what I’d presume the controller emulator being off, I playtest again, though for some reason during that playtest the property UserInputService.GamepadEnabled is still set to true(?) even though the controller emulator widget is not currently open and the keyboard keys are not currently mapped to a controller (Which this last part is expected behavior as far as I’m aware but not the GamepadEnabled state).
So to disable the GamepadEnable state from being set true, I turned the beta off (Though closing studio and opening the same place again does that too);
Though I wanted to make a comment on this because the behavior of that specific part seems confusing or unexpected. I turned the beta back on to double check, this only occurs after you turn the controller emulator on for the first time.
Forgot to mention the device was set to HD 1920x1080 under PC, and never changed this throughout the process.
TLDR:
UserInputService.GamepadEnabled is set to true in playtest even though the controller emulator widget is not on/visible.
Hey, just wanted to report a bug. For some reason Input.Position doesn’t get set when dragging the right thumbstick around.
local State = UserInputService:GetGamepadState(Enum.UserInputType.Gamepad1)
for _, Input : InputObject in State do
if Input.KeyCode == Enum.KeyCode.Thumbstick2 then
print(Input.Position) -- This only prints (0, 0, 0) with emulator
end
end
I am using the xbox one emulator controller.
This code works with an actual controller connected
Hi, I managed to arrive at a pseudo solution: simply to deactivate the gamepad emulator you need to go to File > Beta Features and directly deactivate Gamepad Emulator between the blue ticks. This will deactivate the emulator and the bug will be solved.
Obviously this shouldn’t be the case, roblox should make the gamepad deactivate by closing the widget and not actually deactivating the function.
@BobaTops For the love of god, this horrendous thing should not be automatically enabling itself! It hijacks the first gamepad slot *PERMANENTLY*, making it impossible to use an *actual* gamepad for testing things in studio because it gets thrown into the second gamepad slot and the core/player scripts ignore thumbstick input from all gamepad slots besides the first one.
Yes, I know I can just turn the beta off. Well, I know that now but it took me three hours. I had to waste three hours trying to narrow down what was causing studio to think I had an extra gamepad connected since I have beta features set to automatically enable. Three hours!
Wonderfully executed as always, y’all! Fourteen engineers worked on this and not one of them thought “hey, maybe this thing shouldn’t be permanently enabled, forever hijacking the first gamepad slot!” A true masterclass.
Not to mention, @Kitsomia seems to have reported this very same issue three months ago and a fix is yet to arrive! For those who aren’t particularly math savvy, that’s 25% of a year. What are we doing here???
Can you tell I’m annoyed that I had waste almost half my work day?
EDIT: Actually, as it turns out, it isn’t even possible to turn off the beta anymore! Thanks Roblox, you have officially bricked my ability to test my game in studio.
For those searching for this file on PC, it’s located at %localappdata%/Roblox/Versions/<version####>/BuiltInStandalonePlugins/Optimized_Embedded_Signature/.
The <version-####> will be one of the latest Date Modified folders in the Versions folder. Or, you can search the entire Roblox directory for the file named ControlsEmulator.rbxm and then delete (though I prefer to rename) that file.
Hi @Rocky28447,
We hear you, and we understand how frustrating this must be. We’re actively working on a fix, which should be included in the next Studio update. If you’re still unable to use the Gamepad1 slot by the end of the week, please let us know.
In the meantime, could you try turning off the VR Emulator beta to see if that also disables the gamepad beta?
We appreciate your patience and will keep you updated as we work on resolving this!
Hi @Ethanthegrand14, sorry for the delayed response – are you still experiencing this issue? Also, is there any other context in your script? Trying to reproduce with the snippet you provided prints (0,0,0) once at the beginning, but if I run
RunService.RenderStepped:Connect(function()
local state = UserInputService:GetGamepadState(Enum.UserInputType.Gamepad1)
for _, input : InputObject in state do
if input.KeyCode == Enum.KeyCode.Thumbstick2 then
print(input.Position)
end
end
end)