As a roblox developer, it is currently too hard to manage key input for large games with multiple menus.
I’m working on a game called Midnight Racing: Tokyo, in which I would like to add a tutorial. Right now, tutorials are made using screenshots and text boxes - a very efficient way, but a less effective learning tool. I can’t force the player to click the button they need to click to continue on with the tutorial, or make interactive scenes within the screenshots. A solution would be input layers.
Input layers would allow developers to direct player’s input to only fire bindings that are bound to the same input layer. For instance,
Ingame command: E to enter vehicle
local enterCar = function() end local GoToNextMenuPage = function() end Service:BindToKey(Enum.KeyCode.E, enterCar, "inGame") Service:BindToKey(Enum.KeyCode.E, GoToNextMenuPage, "Menu")
Player enters menu
Input layer changed from “inGame” to “Menu”
Service.InputLayer = "Menu"
Now when the player presses E, they will no longer enter the car, but instead it will connect the menu callback bound to E (or do nothing at all.).
If a command needs to work across the menu and the game (for instance, the chat) then you could bind a keybind to two different layers. for instance:
local callback = function() sendchat() end Service:BindToKey(Enum.KeyCode.Slash, callback) -- no third argument means the binding will connect regardless of layers.
It would be fantastic to also add in support for button clicks and mobile with a feature like this. I think that roblox input is sort of disbursed across different services (mouse, UIS, ContextAction, MouseButtonClick events, etc.) and it’s time to get an input service that can handle it all.