InputObject

Afficher les obsolètes

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Création impossible

Un objet d'entrée représente une seule entrée d'un utilisateur, comme le mouvement de la souris, les touches, les presses de clé et plus encore. Il est créé lorsqu'une entrée commence.

Les propriétés de cet objet varient selon le UserInputType.Chaque type d'entrée subira diverses modifications de son UserInputState .Pendant la durée de vie d'une entrée, d'autres propriétés qui décrivent davantage l'entrée peuvent changer, telles que Position et Delta .Les presses de boutons de clavier et de manette de jeu auront la propriété KeyCode configurer.

Une fois créé au début d'une entrée, le même objet persiste et est mis à jour jusqu'à la fin de l'entrée.Par resultats, vous pouvez suivre les modifications de l'objet en utilisant l'événement Changed lorsque l'utilisateur modifie l'entrée en question.Vous pouvez également placer ces objets dans une liste de pistes d'entrée actives et interagir avec l'objet après sa création par un événement tel que UserInputService.InputBegan .Cela est principalement utile pour les événements tactiles, car chaque point de contact aura un objet d'entrée séparé.

Voir aussi :

  • ContextActionService , qui transmet un objet d'entrée à bound fonctions de traitement d'action
  • UserInputService , dont les événements et les fonctions utilisent souvent InputObject
  • GuiObject , dont les événements liés à l'entrée de l'utilisateur utilisent InputObject

Échantillons de code

L'exemple suivant montre l'un des nombreux exemples d'utilisation de la gestion de l'entrée utilisateur à partir de InputBegan en fonction de son type.

Gestion de l'entrée commencée

-- Pour utiliser l'événement InputBegan, le service UserInputService doit être utilisé
local UserInputService = game:GetService("UserInputService")
-- Une fonction d'échantillon fournissant plusieurs cas d'utilisation pour différents types d'entrée utilisateur
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key is being pushed down! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has started at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button is being pressed on a gamepad! Button:", input.KeyCode)
end
if gameProcessed then
print("The game engine internally observed this input!")
else
print("The game engine did not internally observe this input!")
end
end)

Résumé

Propriétés

Propriétés

Delta

Lecture parallèle

Échantillons de code

Créer un script de binocules

local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head", false)
local mouse = player:GetMouse()
local zoomed = false
local camera = game.Workspace.CurrentCamera
local target = nil
local originalProperties = {
FieldOfView = nil,
_CFrame = nil,
MouseBehavior = nil,
MouseDeltaSensitivity = nil,
}
local AngleX, TargetAngleX = 0, 0
local AngleY, TargetAngleY = 0, 0
-- Réinitialiser la caméra à CFrame et FieldOfView avant le zoom
local function ResetCamera()
target = nil
camera.CameraType = Enum.CameraType.Custom
camera.CFrame = originalProperties._CFrame
camera.FieldOfView = originalProperties.FieldOfView
UserInputService.MouseBehavior = originalProperties.MouseBehavior
UserInputService.MouseDeltaSensitivity = originalProperties.MouseDeltaSensitivity
end
local function ZoomCamera()
-- Permettre à la caméra d'être modifiée par le script
camera.CameraType = Enum.CameraType.Scriptable
-- Stocker les propriétés de la caméra avant le zoom
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Caméra de zoom
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Verrouiller et ralentir la souris
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Réinitialiser les angles de zoom
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Basculer le zoom/dézoomer de la caméra
local function MouseClick()
if zoomed then
-- Dézoomer la caméra
ResetCamera()
else
-- Zoomer dans la caméra
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- tout ce qui est supérieur rendrait la recherche vers le haut et le bas plus difficile ; recommandez tout entre 0~1
local smoothness = 0.05 -- recommander n'importe quoi entre 0~1
local delta = Vector2.new(input.Delta.x / sensitivity, input.Delta.y / sensitivity) * smoothness
local X = TargetAngleX - delta.y
local Y = TargetAngleY - delta.x
TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X
TargetAngleY = (Y >= 80 and 80) or (Y <= -80 and -80) or Y
AngleX = AngleX + (TargetAngleX - AngleX) * 0.35
AngleY = AngleY + (TargetAngleY - AngleY) * 0.15
camera.CFrame = CFrame.new(head.Position, target)
* CFrame.Angles(0, math.rad(AngleY), 0)
* CFrame.Angles(math.rad(AngleX), 0, 0)
end
end
local function InputBegan(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
MouseClick()
end
end
local function InputChanged(input, _gameProcessedEvent)
if input.UserInputType == Enum.UserInputType.MouseMovement then
MouseMoved(input)
end
end
if UserInputService.MouseEnabled then
UserInputService.InputBegan:Connect(InputBegan)
UserInputService.InputChanged:Connect(InputChanged)
end
Lecture parallèle

Échantillons de code

Liaison des touches de manette de jeu prises en charge

local UserInputService = game:GetService("UserInputService")
local ContextActionService = game:GetService("ContextActionService")
local function actionHandler(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print("Action Handler: " .. actionName)
print(inputObject)
end
-- Puisque cette fonction ne renvoie rien, ce gestionnaire va
-- « couler » l'entrée et aucun autre gestionnaire d'action ne sera appelé après
-- celui-ci.
end
local navGamepads = UserInputService:GetNavigationGamepads()
for _, gamepad in pairs(navGamepads) do
local supportedKeyCodes = UserInputService:GetSupportedGamepadKeyCodes(gamepad)
for _, keycode in pairs(supportedKeyCodes) do
if keycode == Enum.KeyCode.ButtonX then
ContextActionService:BindAction("SampleAction", actionHandler, false, Enum.KeyCode.ButtonX)
end
if keycode == Enum.KeyCode.X then
ContextActionService:BindAction("SampleAction", actionHandler, false, Enum.KeyCode.X)
end
end
end

Position

Lecture parallèle

Échantillons de code

Gestion de l'entrée commencée

-- Pour utiliser l'événement InputBegan, le service UserInputService doit être utilisé
local UserInputService = game:GetService("UserInputService")
-- Une fonction d'échantillon fournissant plusieurs cas d'utilisation pour différents types d'entrée utilisateur
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key is being pushed down! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has started at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button is being pressed on a gamepad! Button:", input.KeyCode)
end
if gameProcessed then
print("The game engine internally observed this input!")
else
print("The game engine did not internally observe this input!")
end
end)

UserInputState

Lecture parallèle

Échantillons de code

Liaison des touches de manette de jeu prises en charge

local UserInputService = game:GetService("UserInputService")
local ContextActionService = game:GetService("ContextActionService")
local function actionHandler(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print("Action Handler: " .. actionName)
print(inputObject)
end
-- Puisque cette fonction ne renvoie rien, ce gestionnaire va
-- « couler » l'entrée et aucun autre gestionnaire d'action ne sera appelé après
-- celui-ci.
end
local navGamepads = UserInputService:GetNavigationGamepads()
for _, gamepad in pairs(navGamepads) do
local supportedKeyCodes = UserInputService:GetSupportedGamepadKeyCodes(gamepad)
for _, keycode in pairs(supportedKeyCodes) do
if keycode == Enum.KeyCode.ButtonX then
ContextActionService:BindAction("SampleAction", actionHandler, false, Enum.KeyCode.ButtonX)
end
if keycode == Enum.KeyCode.X then
ContextActionService:BindAction("SampleAction", actionHandler, false, Enum.KeyCode.X)
end
end
end

UserInputType

Lecture parallèle

Échantillons de code

Gestion de l'entrée commencée

-- Pour utiliser l'événement InputBegan, le service UserInputService doit être utilisé
local UserInputService = game:GetService("UserInputService")
-- Une fonction d'échantillon fournissant plusieurs cas d'utilisation pour différents types d'entrée utilisateur
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.Keyboard then
print("A key is being pushed down! Key:", input.KeyCode)
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
print("The left mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
print("The right mouse button has been pressed down at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Touch then
print("A touchscreen input has started at", input.Position)
elseif input.UserInputType == Enum.UserInputType.Gamepad1 then
print("A button is being pressed on a gamepad! Button:", input.KeyCode)
end
if gameProcessed then
print("The game engine internally observed this input!")
else
print("The game engine did not internally observe this input!")
end
end)

Méthodes

IsModifierKeyDown

Paramètres

modifierKey: Enum.ModifierKey
Valeur par défaut : ""

Retours

Événements