GuiObject Inside a BillboardGui or SurfaceGui not Registering Keyboard Input

While in a BillboardGui or SurfaceGui, the InputBegan/etc events of GuiObject (TextBox, Frame, etc) capture mouse input, but not keyboard input. While in a ScreenGui, they are fine. Here’s a quick Repro:

Clickable BGui.rbxl (30.2 KB)

Repro steps:

  • Enter play solo
  • Click BillboardGui in world and notice that events print to output
  • Press keys on keyboard while mouse is hovering over BillboardGui and notice that events are not printed to output
  • Open PlayerGui.ScreenGui and set the Frame’s Visible property to true
  • Repeat the above steps for mouse/keyboard presses and notice both are printed to the output, and not just mouse events

The Guis are both parented to PlayerGui, the BillboardGui is Enabled and has Active set to true, and the Frame is Active and Visible. This happens with any GuiObject, and not just frames.

1 Like

I am having the same problem with my first attempt at a TextBox in a SurfaceGui. Works fine in a ScreenGui but I can’t figure out how to get the TextBoxin a SurfaceGui to get keyboard focus. It behaves exactly like a TextLabel.

(P.S. I am a newbie to this forum and cannot figure out how to read the two replies to this post…)

Actually there weren’t any replies to this Thread until now.



Your SurfaceGui has to be parented to PlayerGui to be interactive otherwise it won’t detect any input.
Use Adornee to display it on a Part you want.

However your issue and the OP are two different things, the OP state’s that InputBegan Event doesn’t work for anything else other than a ScreenGui, while your case is a lack of knowledge on how to use SurfaceGui/BillboardGui appropriately.

In other words the scenario from your reply isn’t a bug but rather how the Engine works.

1 Like

Thank you for a very helpful and timely reply. I am guessing the issue is keyboard entry is inherently a local thing and again I am guessing that if a SurfaceGui is not parented to something local then its essentially an attempt to implement local behavior on a server (global?) object.