Passer au contenu principal
Version: latest - a1.169.2 ⚖️

Entrées et raccourcis clavier

Comment réagir au clavier et à la souris du joueur, avec des raccourcis que les joueurs peuvent personnaliser.

Toutes les entrées sont gérées côté client, via la classe statique Input. Si le serveur doit être informé, envoyez un Remote Event.

La meilleure façon de gérer les entrées est d'enregistrer un Key Binding : vous lui donnez un nom et une touche par défaut, et les joueurs peuvent changer la touche dans les paramètres du jeu (Settings -> Controls). Cela évite aussi les conflits avec d'autres Packages et avec les différentes dispositions de clavier.

Client/Index.lua
-- Registers a Key Binding called "OpenShop", using the key B by default
Input.Register("OpenShop", "B", "Opens the Shop")

-- Calls this function when the binding is pressed
Input.Bind("OpenShop", InputEvent.Pressed, function()
Console.Log("Opening the shop!")
end)

-- And when it's released
Input.Bind("OpenShop", InputEvent.Released, function()
Console.Log("Released the shop key")
end)

Vous pouvez aussi vous brancher sur les raccourcis du jeu lui-même (comme Jump ou Crouch), listés par Input.GetGameKeyBindings(). Et vous pouvez vérifier si un raccourci est enfoncé avec Input.IsBindingDown().

tip

Pour afficher la touche utilisée par un raccourci (par ex. dans votre interface), utilisez Input.GetMappedKeys() et Input.GetKeyIcon().

Événements d'entrée bruts​

Quand les Key Bindings ne conviennent pas (par ex. saisie de texte, ou réaction à n'importe quelle touche), vous pouvez vous abonner aux événements d'entrée bruts :

Client/Index.lua
Input.Subscribe("KeyPress", function(key_name)
Console.Log("Pressed %s", key_name)
end)

Input.Subscribe("MouseUp", function(key_name, mouse_x, mouse_y)
if (key_name == "LeftMouseButton") then
Console.Log("Clicked at %d, %d", mouse_x, mouse_y)
end
end)

Input.Subscribe("MouseScroll", function(mouse_x, mouse_y, delta)
-- delta is positive when scrolling up and negative when scrolling down
Console.Log("Scrolled %d", delta)
end)

Renvoyer false dans KeyDown, KeyPress, KeyUp, MouseDown, MouseUp, MouseMove et MouseScroll bloque l'entrée : le jeu (et le Character) n'y réagira pas.

La liste de tous les noms de touches est sur la page Input.

Curseur de la souris et focus de l'interface​

À l'ouverture d'un menu, on veut en général afficher le curseur et empêcher le Character de bouger :

Client/Index.lua
function SetMenuOpen(is_open)
-- Shows the mouse cursor, so the player can click on the UI
Input.SetMouseEnabled(is_open)

-- Stops the Local Player input (moving, shooting...) while the menu is open
Input.SetInputEnabled(not is_open)

if (is_open) then
-- Makes the WebUI receive keyboard input (e.g. to type in text fields)
my_menu_ui:SetFocus()
else
my_menu_ui:RemoveFocus()
end
end
attention

Pensez toujours à rétablir la souris et les entrées à la fermeture du menu, sinon le joueur restera bloqué !