UserInputService

Pokaż przestarzałe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Brak możliwości tworzenia
Usługa
Bez replikacji

UserInputService jest usługą używaną do wykrywania i przechwytywania różnych rodzajów wejść dostępnych na urządzeniu użytkownika.

Głównym celem tej usługi jest umożliwienie współpracy doświadczeń z wieloma formami dostępnego wejścia, takimi jak pady do gier, ekrany dotykowe i klawiatury.Umożliwia LocalScript wykonywanie różnych działań w zależności od urządzenia i, z kolei, zapewnia najlepsze doświadczenia dla użytkownika końcowego.

Niektóre zastosowania tej usługi obejmują wykrywanie wpisów użytkownika podczas interakcji z interfejsami użytkownika, narzędziami i innymi instancjami gry.Aby wykryć wejście użytkownika, usługa musi szukać wydarzenia usługi.Na przykład usługa może wykrywać wydarzenia, takie jak gdy użytkownik dotknie ekranu urządzenia mobilnego za pomocą UserInputService.TouchStarted lub podłączy gamepad, takich jak kontroler Xbox, do swojego urządzenia za pomocą UserInputService.GamepadConnected .

Ponieważ ta usługa jest tylko po stronie klienta, będzie działać tylko wtedy, gdy zostanie użyta w LocalScript lub ModuleScript wymaganym przez LocalScript.Ponieważ Usługa wejścia użytkownika jest tylko po stronie klienta, użytkownicy w grze mogą wykrywać tylko własne wejście - a nie wejście innych.

Zobacz także ContextActionService , usługę, która pozwala wiązać funkcje do wielu wejść użytkownika.

Podsumowanie

Właściwości

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Opisuje, czy urządzenie użytkownika ma akcelerometr.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Opisuje, czy urządzenie używane przez użytkownika ma dostępny gamepad.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Opisuje, czy urządzenie użytkownika ma akcelerometr.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Opisuje, czy urządzenie użytkownika ma dostępną klawiaturę.

  • Określa, czy mysz użytkownika może być swobodnie przesuwana lub jest zamknięta.

  • Bez replikacji
    Odczyt równoległy

    Skaluje wyjście delta (zmiana) użytkownika Mouse.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Opisuje, czy urządzenie użytkownika ma dostępną mysz.

  • MouseIcon:ContentId
    Odczyt równoległy

    ID treści obrazu używanego jako ikona myszy użytkownika.

  • Odczyt równoległy

    Określa, czy ikonka Mouse jest widoczna.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Określa pozycję klawiatury na ekranie.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Określa rozmiar klawiatury na ekranie.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Opisuje, czy klawiatura na ekranie jest obecnie widoczna na ekranie użytkownika.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy
  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Opisuje, czy aktualne urządzenie użytkownika ma dostępną powierzchnię dotykową.

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Wskazuje, czy użytkownik korzysta z goglek wirtualnej rzeczywistości.

Metody

Zdarzenia

Właściwości

AccelerometerEnabled

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ta opisuje, czy urządzenie użytkownika ma akcelerometr

Akcelerometr to komponent znajdujący się w większości urządzeń mobilnych, który mierzy przyspieszenie (zmianę prędkości).

Na przykład następny kod pokazuje, jak sprawdzić, czy urządzenie użytkownika ma akcelerometr.


local UserInputService = game:GetService("UserInputService")
local accelerometerEnabled = UserInputService.AccelerometerEnabled
if accelerometerEnabled then
print("Accelerometer enabled!")
else
print("Accelerometer not enabled!")
end

Jeśli urządzenie ma włączony akcelerometr, możesz uzyskać jego obecną akcelerację za pomocą funkcji UserInputService:GetDeviceAcceleration() lub śledzić, gdy akceleracja urządzenia zmienia się za pomocą wydarzenia UserInputService.DeviceAccelerationChanged.

Ponieważ UserInputService jest tylko po stronie klienta, ta właściwość może być używana tylko w LocalScript.

Przykłady kodu

This code adds a force on a part so that it falls in the direction of actual gravity relative to the user's device. In order for this example to work as expected, it must be placed in a LocalScript and the user's device must have an accelerometer.

Move a Ball using the Accelerometer

local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end

GamepadEnabled

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ta opisuje, czy urządzenie używane przez użytkownika ma dostępny gamepad.Jeśli dostępne są gamepady, możesz użyć UserInputService:GetConnectedGamepads() aby odzyskać listę połączonych gamepadów.

Ponieważ UserInputService jest tylko po stronie klienta, ta właściwość może być używana tylko w LocalScript.

Zobacz także:

GyroscopeEnabled

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ta opisuje, czy urządzenie użytkownika ma akcelerometr.

Gyroskop to komponent znajdujący się w większości urządzeń mobilnych, które wykrywają orientację i prędkość obrotową.

Jeśli urządzenie użytkownika ma akcelerometr, możesz go zintegrować z grą za pomocą funkcji UserInputService:GetDeviceRotation() i wydarzenia UserInputService.DeviceRotationChanged.


local UserInputService = game:GetService("UserInputService")
local gyroIsEnabled = UserInputService.GyroscopeEnabled
if gyroIsEnabled then
print("Gyroscope is enabled!")
else
print("Gyroscope is not enabled!")
end

Ponieważ UserInputService jest tylko po stronie klienta, ta właściwość może być używana tylko w LocalScript.

KeyboardEnabled

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ta opisuje, czy urządzenie użytkownika ma dostępną klawiaturę.Właściwość ta jest true , gdy urządzenie użytkownika ma dostępną klawiaturę, a false gdy nie ma.

Można go użyć do określenia, czy użytkownik ma dostępną klawiaturę - co może być ważne, jeśli chcesz sprawdzić, czy możesz używać UserInputService:IsKeyDown() lub UserInputService:GetKeysPressed() do sprawdzania wpisu klawiatury.

Ponieważ UserInputService jest tylko po stronie klienta, ta właściwość może być używana tylko w LocalScript.

MouseBehavior

Odczyt równoległy

Właściwość ta określa, jak zachowuje się mysz użytkownika w oparciu o Enum.MouseBehavior enum. Można ją ustawić na trzy wartości:

Wartość tej właściwości nie wpływa na czułość śledzenia ruchu myszy.Na przykład, GetMouseDelta zwraca tę samą pozycję ekranu Vector2 w pikselach niezależnie od tego, czy mysz jest zablokowana, czy może swobodnie poruszać się po ekranie użytkownika.W rezultacie domyślne skrypty, takie jak te kontrolujące kamerę, nie są dotknięte przez tę właściwość.

Właściwość ta jest anulowana, jeśli włączono GuiButton z Modal jeśli prawy przycisk myszy gracza jest w dół, chyba że włączono GuiButton.Visible

Zauważ, że jeśli mysz jest zablokowana, UserInputService.InputChanged nadal wystrzeli, gdy gracz przesunie mysz i przekaże w Delta, którą mysz próbował przesunąć.Ponadto, jeśli gracz zostanie wyrzucony z gry, mysz zostanie siłą odblokowana.

Ponieważ UserInputService jest tylko po stronie klienta, ta właściwość może być używana tylko w LocalScript.

Przykłady kodu

Ten przykład tworzy skrypt lornetki, który zmniejsza FieldOfView() i MouseDeltaSensitivity() gracza, gdy gracz z MouseEnabled() ma lewe kliknięcia myszy.Skrypt wskazuje również kierunek ruchu gracza Camera w kierunku pozycji świata Vector3 kliknięcia myszy.

Kiedy gracz ponownie kliknie myszą, kamera gracza powraca do niestandardowej Enum.CameraType z tym samym polem widzenia i CFrame() tak jak przed tym, jak gracz przybliżył się za pomocą skryptu.

Podczas gdy gracz używa lornetki, skrypt blokuje mysz gracza w centrum ekranu, ustawiając gracza MouseBehavior() na BlokujCentrum.Kamera gracza porusza się, gdy gracz przesuwa mysz zgodnie z właściwością InputObject.Delta, przekazaną przez InputChanged(), wskazującą zmianę pozycji na ekranie Vector2 myszy.

Aby ten przykład działał zgodnie z oczekiwaniem, należy go umieścić w LocalScript.

Stwórz skrypt lornetki

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
-- Zresetuj kamerę powrotem do CFrame i FieldOfView przed przysunięciem
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()
-- Pozwól, aby kamera została zmieniona przez skrypt
camera.CameraType = Enum.CameraType.Scriptable
-- Przechowywanie właściwości kamery przed przysunięciem
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Przybliż kamera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Zablokuj i spowolnij mysz
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Zresetuj kąty przymiotu
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Przełącz zoom/odbicie kamery
local function MouseClick()
if zoomed then
-- Odpręż kamerę
ResetCamera()
else
-- Przybliż kamerę
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- wszystko powyżej sprawiłoby, że poszukiwanie w górę i w dół będzie trudniejsze; zalecam wszystko pomiędzy 0~1
local smoothness = 0.05 -- polecaj coś pomiędzy 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

MouseDeltaSensitivity

Bez replikacji
Odczyt równoległy

Właściwość ta określa wrażliwość użytkownika Mouse.

Czułość określa zakres, w jakim ruch fizycznej myszy przekłada się na ruch myszy w grze.Można to użyć do dostosowania, w jaki sposób wrażliwe śledzenie ruchu myszy, takie jak GetMouseDelta, ma być dostosowane do ruchu myszy.

Właściwość ta nie wpływa na ruch ikony myszy.Nie wpływa to również na ustawienie czułości kamery znalezione w zakładce Ustawienia menu Ustawienia klienta, które również dostosowuje czułość śledzenia ruchu myszy.

Właściwość ta ma maksymalną wartość 10 i minimalną wartość 0.Wartość niższa odpowiada niższej czułości, a wyższa odpowiada wyższej czułości.

Gdy czułość wynosi 0, wydarzenia śledzące ruch myszy nadal będą wystrzeliwane, ale wszystkie parametry i właściwości wskazujące na zmianę pozycji myszy zwrócą Vector2.new() lub Vector3.new() w przypadku InputObject.Delta.Na przykład GetMouseDelta zawsze zwróci (0, 0).

Przykłady kodu

Ten przykład tworzy skrypt lornetki, który zmniejsza FieldOfView() i MouseDeltaSensitivity() gracza, gdy gracz z MouseEnabled() ma lewe kliknięcia myszy.Skrypt wskazuje również kierunek ruchu gracza Camera w kierunku pozycji świata Vector3 kliknięcia myszy.

Kiedy gracz ponownie kliknie myszą, kamera gracza powraca do niestandardowej Enum.CameraType z tym samym polem widzenia i CFrame() tak jak przed tym, jak gracz przybliżył się za pomocą skryptu.

Podczas gdy gracz używa lornetki, skrypt blokuje mysz gracza w centrum ekranu, ustawiając gracza MouseBehavior() na BlokujCentrum.Kamera gracza porusza się, gdy gracz przesuwa mysz zgodnie z właściwością InputObject.Delta, przekazaną przez InputChanged(), wskazującą zmianę pozycji na ekranie Vector2 myszy.

Aby ten przykład działał zgodnie z oczekiwaniem, należy go umieścić w LocalScript.

Stwórz skrypt lornetki

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
-- Zresetuj kamerę powrotem do CFrame i FieldOfView przed przysunięciem
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()
-- Pozwól, aby kamera została zmieniona przez skrypt
camera.CameraType = Enum.CameraType.Scriptable
-- Przechowywanie właściwości kamery przed przysunięciem
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Przybliż kamera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Zablokuj i spowolnij mysz
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Zresetuj kąty przymiotu
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Przełącz zoom/odbicie kamery
local function MouseClick()
if zoomed then
-- Odpręż kamerę
ResetCamera()
else
-- Przybliż kamerę
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- wszystko powyżej sprawiłoby, że poszukiwanie w górę i w dół będzie trudniejsze; zalecam wszystko pomiędzy 0~1
local smoothness = 0.05 -- polecaj coś pomiędzy 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

MouseEnabled

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ta opisuje, czy urządzenie użytkownika ma dostępną mysz.Właściwość ta jest true, gdy urządzenie użytkownika ma dostępną mysz, a false gdy nie ma.


local UserInputService = game:GetService("UserInputService")
if UserInputService.MouseEnabled then
print("The user's device has an available mouse!")
else
print("The user's device does not have an available mouse!")
end

Ważne jest, aby to sprawdzić przed użyciem funkcji myszy UserInputService takich jak UserInputService:GetMouseLocation().

Ponieważ UserInputService jest tylko po stronie klienta, ta właściwość może być używana tylko w LocalScript.

Zobacz także:

Przykłady kodu

Ten przykład tworzy skrypt lornetki, który zmniejsza FieldOfView() i MouseDeltaSensitivity() gracza, gdy gracz z MouseEnabled() ma lewe kliknięcia myszy.Skrypt wskazuje również kierunek ruchu gracza Camera w kierunku pozycji świata Vector3 kliknięcia myszy.

Kiedy gracz ponownie kliknie myszą, kamera gracza powraca do niestandardowej Enum.CameraType z tym samym polem widzenia i CFrame() tak jak przed tym, jak gracz przybliżył się za pomocą skryptu.

Podczas gdy gracz używa lornetki, skrypt blokuje mysz gracza w centrum ekranu, ustawiając gracza MouseBehavior() na BlokujCentrum.Kamera gracza porusza się, gdy gracz przesuwa mysz zgodnie z właściwością InputObject.Delta, przekazaną przez InputChanged(), wskazującą zmianę pozycji na ekranie Vector2 myszy.

Aby ten przykład działał zgodnie z oczekiwaniem, należy go umieścić w LocalScript.

Stwórz skrypt lornetki

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
-- Zresetuj kamerę powrotem do CFrame i FieldOfView przed przysunięciem
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()
-- Pozwól, aby kamera została zmieniona przez skrypt
camera.CameraType = Enum.CameraType.Scriptable
-- Przechowywanie właściwości kamery przed przysunięciem
originalProperties._CFrame = camera.CFrame
originalProperties.FieldOfView = camera.FieldOfView
originalProperties.MouseBehavior = UserInputService.MouseBehavior
originalProperties.MouseDeltaSensitivity = UserInputService.MouseDeltaSensitivity
-- Przybliż kamera
target = mouse.Hit.Position
local eyesight = head.Position
camera.CFrame = CFrame.new(eyesight, target)
camera.Focus = CFrame.new(target)
camera.FieldOfView = 10
-- Zablokuj i spowolnij mysz
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseDeltaSensitivity = 1
-- Zresetuj kąty przymiotu
AngleX, TargetAngleX = 0, 0
AngleY, TargetAngleY = 0, 0
end
-- Przełącz zoom/odbicie kamery
local function MouseClick()
if zoomed then
-- Odpręż kamerę
ResetCamera()
else
-- Przybliż kamerę
ZoomCamera()
end
zoomed = not zoomed
end
local function MouseMoved(input)
if zoomed then
local sensitivity = 0.6 -- wszystko powyżej sprawiłoby, że poszukiwanie w górę i w dół będzie trudniejsze; zalecam wszystko pomiędzy 0~1
local smoothness = 0.05 -- polecaj coś pomiędzy 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

MouseIcon

ContentId
Odczyt równoległy

Właściwość MouseIcon określa obraz używany jako wskaznik.Jeśli jest pusty, używany jest domyślny strzał.Podczas gdy kurser przewija się nad niektórymi obiektami interfejsu użytkownika, takimi jak ImageButton, TextButton, TextBox lub ProximityPrompt, obraz zostanie zastąpiony i tymczasowo zignorowany.

Aby ukryć całkowicie kursor, nie używaj transparentnego obrazu . Zamiast tego ustaw UserInputService.MouseIconEnabled na fałsz.

Przykłady kodu

This example changes the user mouse icon to look like a dragon image.

Custom Mouse Icon

local UserInputService = game:GetService("UserInputService")
-- In order to restore the cursor to what it was set to previously, it will need to be saved to a variable
local savedCursor = nil
local function setTemporaryCursor(cursor: string)
-- Only update the saved cursor if it's not currently saved
if not savedCursor then
savedCursor = UserInputService.MouseIcon
end
UserInputService.MouseIcon = cursor
end
local function clearTemporaryCursor()
-- Only restore the mouse cursor if there's a saved cursor to restore
if savedCursor then
UserInputService.MouseIcon = savedCursor
-- Don't restore the same cursor twice (might overwrite another script)
savedCursor = nil
end
end
setTemporaryCursor("http://www.roblox.com/asset?id=163023520")
print(UserInputService.MouseIcon)
clearTemporaryCursor()

MouseIconEnabled

Odczyt równoległy

Właściwość ta określa, czy ikona jest widoczna, gdy ikona myszy jest widoczna, gdy nie jest.

Na przykład kodowy kawałek poniżej ukrywa ikonę myszy.


local UserInputService = game:GetService("UserInputService")
UserInputService.MouseIconEnabled = false

Ponieważ UserInputService jest tylko po stronie klienta, ta właściwość może być używana tylko w LocalScript.

Przykłady kodu

This example hides the mouse icon while the player beings using their keyboard, such as to chat or enter text into a TextBox. The mouse icon reappears when the user resumes mouse input.

This uses the LastInputType() event to determine when the user begins keyboard input and mouse input - based on the value of the lastInputType argument.

In order for this example to work as expected, it should be placed in a LocalScript.

Hide Mouse During Keyboard Input

local UserInputService = game:GetService("UserInputService")
local mouseInput = {
Enum.UserInputType.MouseButton1,
Enum.UserInputType.MouseButton2,
Enum.UserInputType.MouseButton3,
Enum.UserInputType.MouseMovement,
Enum.UserInputType.MouseWheel,
}
local keyboard = Enum.UserInputType.Keyboard
local function toggleMouse(lastInputType)
if lastInputType == keyboard then
UserInputService.MouseIconEnabled = false
return
end
for _, mouse in pairs(mouseInput) do
if lastInputType == mouse then
UserInputService.MouseIconEnabled = true
return
end
end
end
UserInputService.LastInputTypeChanged:Connect(toggleMouse)

OnScreenKeyboardPosition

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ta opisuje pozycję klawiatury na ekranie w pikselach. Pozycja klawiatury jest Vector2.new(0, 0) , gdy nie jest widoczna.

Ponieważ UserInputService jest tylko po stronie klienta, ta właściwość może być używana tylko w LocalScript lub Script z ustawieniem RunContext na Enum.RunContext.Client.

Zobacz także OnScreenKeyboardVisible i OnScreenKeyboardSize.

OnScreenKeyboardSize

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ta opisuje rozmiar klawiatury na ekranie w pikselach. Rozmiar klawiatury wynosi Vector2.new(0, 0), gdy nie jest widoczna.

Ponieważ UserInputService jest tylko po stronie klienta, ta właściwość może być używana tylko w LocalScript lub Script z ustawieniem RunContext na Enum.RunContext.Client.

Zobacz także OnScreenKeyboardVisible i OnScreenKeyboardPosition.

OnScreenKeyboardVisible

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ta opisuje, czy klawiatura na ekranie jest obecnie widoczna na ekranie użytkownika.

Ponieważ UserInputService jest tylko po stronie klienta, ta właściwość może być używana tylko w LocalScript lub Script z ustawieniem RunContext na Enum.RunContext.Client.

Zobacz także OnScreenKeyboardSize i OnScreenKeyboardPosition.

PreferredInput

Tylko do odczytu
Bez replikacji
Odczyt równoległy

TouchEnabled

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ta opisuje, czy aktualne urządzenie użytkownika ma dostępną powierzchnię dotykową.

Właściwość jest używana do określenia, czy urządzenie użytkownika ma ekran dotykowy i dlatego czy zdarzenia dotykowe będą wystrzeliwowane.Jeśli włączone jest dotykanie, możesz używać wydarzeń z usługi UserInputService, takich jak UserInputService.TouchStarted i UserInputService.TouchEnded, aby śledzić, kiedy użytkownik zaczyna i kończy dotykanie ekranu swojego urządzenia.

Kodowy snippet poniżej drukuje, czy urządzenie użytkownika ma ekran dotykowy.


local UserInputService = game:GetService("UserInputService")
if UserInputService.TouchEnabled then
print("The user's device has a touchscreen!")
else
print("The user's device does not have a touchscreen!")
end

Zobacz także:

VREnabled

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Właściwość ta opisuje, czy użytkownik korzysta z urządzenia wirtualnej rzeczywistości (VR).

Jeśli urządzenie VR jest włączone, możesz wchodzić w interakcję z jego lokalizacją i ruchami za pomocą funkcji takich jak UserInputService:GetUserCFrame().Możesz również reagować na ruch urządzenia VR za pomocą wydarzenia UserInputService.UserCFrameChanged.


local UserInputService = game:GetService("UserInputService")
local isUsingVR = UserInputService.VREnabled
if isUsingVR then
print("User is using a VR headset!")
else
print("User is not using a VR headset!")
end

Ponieważ UserInputService jest tylko po stronie klienta, ta właściwość może być używana tylko w LocalScript.

Zobacz także:

Przykłady kodu

This example demonstrates how to implement a head tracking script that mirrors the movement of a virtual reality (VR) headset (the user's actual head) to their in-game character's head.

The example first check if the user is using a VR device by checking the value of the VREnabled() property. This example only works if the user is using a VR headset.

To determine the initial CFrame of the character's head, the code sample calls GetUserCFrame() and passes Enum.UserCFrame.Head as the argument.

To update the head's CFrame whenever the user's VR headset moves, the example connects the VRService.UserCFrameChanged event to the TrackHead() function. When the event fires to indicate that a VR device moved, TrackHead() checks if the headset moved. If the headset moved, the function updates the CFrame of the character's head to the CFrame value provided as an argument.

As the UserCFrame enum also tracks VR left and right hand devices, the concept of VR device tracking can be expanded to other character bodyparts.

In order for the example to work as expected, it must be placed in a LocalScript.

VR Head Tracking

local VRService = game:GetService("VRService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.CharacterAdded:Wait()
local head = character:WaitForChild("Head")
local function TrackHead(inputType, value)
if inputType == Enum.UserCFrame.Head then
head.CFrame = value
end
end
if VRService.VREnabled then
-- Set the initial CFrame
head.CFrame = VRService:GetUserCFrame(Enum.UserCFrame.Head)
-- Track VR headset movement and mirror for character's head
VRService.UserCFrameChanged:Connect(TrackHead)
end

Metody

GamepadSupports

Funkcja ta zwraca, czy podany gamepad Enum.UserInputType wspiera przycisk odpowiadający danemu Enum.KeyCode.Funkcja ta jest używana do określenia ważnych wejść z pada gry.

Aby określić, które Enum.UserInputType pady gier są podłączone, użyj UserInputService:GetConnectedGamepads().

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.

Zobacz także:

Parametry

gamepadNum: Enum.UserInputType

The Enum.UserInputType z gamepada.

Wartość domyślna: ""
gamepadKeyCode: Enum.KeyCode

Przycisk Enum.KeyCode z pytania.

Wartość domyślna: ""

Zwroty

Czy podany gamepad wspiera przycisk odpowiadający danemu Enum.KeyCode.

GetConnectedGamepads

Funkcja ta zwraca tablicę Enum.UserInputType padeł gry obecnie podłączonych.Jeśli żadne gamepady nie są podłączone, ta matryca będzie pusta.Ponadto zwraca tylko obiekty UserInputType, które są gamepadami.Na przykład, to wydarzenie zwróci połączony obiekt Gamepad1, ale nie obiekt klawiatury.

Na przykład następujący kod snippet odzyskuje połączone gamepady i przechowuje je w zmiennej o nazwie connectedGamepads.


local UserInputService = game:GetService("UserInputService")
local connectedGamepads = UserInputService:GetConnectedGamepads()

Aby sprawdzić, czy podłączono określoną konsolę, użyj UserInputService:GetGamepadConnected().

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.

Zobacz także:


Zwroty

Zbiór UserInputTypes odpowiadający gamepadom połączonym z urządzeniem użytkownika.

GetDeviceAcceleration

Funkcja GetDeviceAcceleration określa obecną akcelerację urządzenia użytkownika.Zwraca InputObject, który opisuje obecną akcelerację urządzenia.

Aby to działało, urządzenie użytkownika musi mieć włączony akcelerometr.Aby sprawdzić, czy urządzenie użytkownika ma akcelerometr włączony, możesz sprawdzić właściwość UserInputService.AccelerometerEnabled.

Jeśli chcesz śledzić zmiany przyspieszenia urządzenia użytkownika zamiast tego, możesz użyć wydarzenia UserInputService.DeviceAccelerationChanged.

Ponieważ strzela tylko lokalnie, może być używany tylko w LocalScript.


Zwroty

Przykłady kodu

This example checks if a user's device has an enabled accelerometer and, if true, it outputs the current acceleration.

Output Device Acceleration

local UserInputService = game:GetService("UserInputService")
if UserInputService.AccelerometerEnabled then
local acceleration = UserInputService:GetDeviceAcceleration().Position
print(acceleration)
else
warn("Cannot get device acceleration because device does not have an enabled accelerometer!")
end

GetDeviceGravity

Funkcja ta zwraca InputObject opisujący obecny wektor grawitacji urządzenia.

Wektor grawitacji jest określany przez orientację urządzenia względem siły grawitacji w świecie rzeczywistym.Na przykład, jeśli urządzenie jest doskonale pionowe (portret), wektor grawitacji wynosi Vector3.new(0, 0, -9.18) .Jeśli lewa strona urządzenia wskazuje w dół, wektor jest Vector3.new(9.81, 0, 0).Wreszcie, jeśli tył urządzenia wskazuje w dół, wektor jest Vector3.new(0, -9.81, 0).

Funkcja ta może być używana do włączenia urządzenia użytkownika, które może wpływać na grawitację w grze lub przemieszczać obiekty w grze, takie jak piłka.

Grawitacja jest śledzona tylko dla graczy używających urządzenia z aktywnym akcelerometrem - takiego jak urządzenie mobilne.

Aby sprawdzić, czy urządzenie użytkownika ma włączony akcelerometr, sprawdź wartość UserInputService.GyroscopeEnabled.Jeśli urządzenie ma włączony akcelerometr, możesz również użyć wydarzenia UserInputService.DeviceGravityChanged, aby śledzić, kiedy siła grawitacji na urządzeniu użytkownika zmienia się.

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.


Zwroty

Przykłady kodu

This example implements a level where the bubble will move along the X and Z axes depending on the device's current gryoscope position.

Moving Objects with the Gyroscope

local UserInputService = game:GetService("UserInputService")
local bubble = script.Parent:WaitForChild("Bubble")
local camera = workspace.CurrentCamera
camera.CameraType = Enum.CameraType.Scriptable
camera.CFrame = CFrame.new(0, 20, 0) * CFrame.Angles(-math.pi / 2, 0, 0)
if UserInputService.GyroscopeEnabled then
-- Bind event to when gyroscope detects change
UserInputService.DeviceGravityChanged:Connect(function(accel)
-- Move the bubble in the world based on the gyroscope data
bubble.Position = Vector3.new(-8 * accel.Position.X, 1.8, -8 * accel.Position.Z)
end)
end

GetDeviceRotation

Funkcja ta zwraca InputObject i CFrame opisującą aktualny wektor rotacji urządzenia.

Wystrzeliwany jest za pomocą obiektu wejściowego.Właściwość Pozycja obiektu wejściowego jest właściwością Enum.InputType.Gyroscope, która śledzi całkowitą rotację w każdym osi lokalnego urządzenia.

Rotacja urządzenia może być śledzona tylko na urządzeniach z gyroscope.

Ponieważ ta funkcja wystrzeliwuje lokalnie, można jej używać tylko w LocalScript.


Zwroty

Tuple zawierający dwie właściwości:

  1. Właściwość delta opisuje ilość rotacji, która miała miejsce po raz ostatni
  2. CFRame to obecna rotacja urządzenia względem jego domyślnego ramu odniesienia.

Przykłady kodu

This example checks if a user's device has an enabled gyroscope and, if true, it outputs the device's current CFrame.

Output Device Rotation

local UserInputService = game:GetService("UserInputService")
if UserInputService.GyroscopeEnabled then
local _, cf = UserInputService:GetDeviceRotation()
print(cf)
else
warn("Cannot get device rotation because device does not have an enabled gyroscope!")
end

GetFocusedTextBox

Funkcja ta zwraca TextBox klient jest obecnie skoncentrowany na.A TextBox może być wybrane ręcznie przez użytkownika, a wybór może być zmuszony za pomocą funkcji TextBox:CaptureFocus().Jeśli nie zostanie wybrane żadne TextBox, ta funkcja zwróci nil.

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.

Zobacz także

Zwroty

GetGamepadConnected

Funkcja ta zwraca, czy gamepad z danym Enum.UserInputType jest podłączony do klienta.

Można tego użyć, aby sprawdzić, czy konkretna konsola, tak jak 'Gamepad1', jest podłączona do urządzenia klienta.

Aby odzyskać listę wszystkich połączonych gamepadów, użyj UserInputService:GetConnectedGamepads().

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.

Zobacz także:

Parametry

gamepadNum: Enum.UserInputType

The Enum.UserInputType z gamepada w kwestii.

Wartość domyślna: ""

Zwroty

Czy gamepad powiązany z Enum.UserInputType jest podłączony.

GetGamepadState

Funkcja ta zwraca tablicę dla wszystkich dostępnych wejść na podanych gamepadzie, reprezentując ostatni stan wejścia każdego wejścia.

Aby znaleźć UserInputTypes połączonych gamepadów, użyj UserInputService:GetConnectedGamepads().

Ponieważ ta funkcja wystrzeliwuje tylko lokalnie, można jej używać tylko w LocalScript.

Zobacz także:

Parametry

gamepadNum: Enum.UserInputType

The Enum.UserInputType odpowiadający gamepadowi w kwestii.

Wartość domyślna: ""

Zwroty

Matryca InputObjects reprezentująca obecny stan wszystkich dostępnych wejść dla danego gamepada.

GetImageForKeyCode

ContentId

Ta metoda bierze żądaną Enum.KeyCode i zwraca powiązany obraz dla obecnie podłączonego urządzenia gamepad (ograniczony do Xbox, PlayStation i Windows).Oznacza to, że jeśli połączony kontroler jest kontrolerem Xbox One, użytkownik widzi zasoby Xbox.Podobnie, jeśli połączone urządzenie jest kontrolerem PlayStation, użytkownik widzi zasoby PlayStation.Jeśli chcesz korzystać z niestandardowych zasobów, zobacz GetStringForKeyCode().

Parametry

keyCode: Enum.KeyCode

The Enum.KeyCode dla którego należy pobrać powiązany obraz.

Wartość domyślna: ""

Zwroty

ContentId

ID zwróconego obrazu zasobu.

Przykłady kodu

Ta API zwraca żądaną obraz dla podanego Enum.KeyCode.

UserInputService - Zdobądź obraz dla kodu klucza

local UserInputService = game:GetService("UserInputService")
local imageLabel = script.Parent
local key = Enum.KeyCode.ButtonA
local mappedIconImage = UserInputService:GetImageForKeyCode(key)
imageLabel.Image = mappedIconImage

GetKeysPressed

Funkcja ta zwraca tablicę InputObjects powiązanych z klawiszami, które są obecnie naciskane.

Ta tablica może być przetwarzana, aby określić, które klawisze są obecnie naciskane, za pomocą wartości InputObject.KeyCode.

Aby sprawdzić, czy naciśnięto określoną klawisz, użyj UserInputService:IsKeyDown().

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.


Zwroty

Zbiór InputObjects powiązanych z klawiszami obecnie naciśniętych klawisz.

GetLastInputType

Funkcja ta zwraca 'Enum.UserInputType` związany z najnowszym wejściem użytkownika.

Na przykład, jeśli poprzednie wejście użytkownika naciskało spacji, zwrócony byłby Enum.UserInputType'Klawiatura'.

Wydarzenie UserInputService.LastInputTypeChanged może być użyte do śledzenia, kiedy ostatnia Enum.UserInputType zmiana użytkownika została wykorzystana.

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.


Zwroty

The Enum.UserInputType związany z najnowszym wpisem użytkownika.

Przykłady kodu

This example gets the last Enum.UserInputType and outputs if it was keyboard input.

Detect Last Input Type

local UserInputService = game:GetService("UserInputService")
if UserInputService:GetLastInputType() == Enum.UserInputType.Keyboard then
print("Most recent input was keyboard!")
end

GetMouseButtonsPressed

Funkcja ta zwraca tablicę InputObjects odpowiadającą przyciskom myszy, które są obecnie naciskane.

Przyciski myszy śledzone przez tę funkcję obejmują:


<td>Opis</td>
</tr>
</thead>
<tr>
<td>Przycisk myszy1</td>
<td>Lewe przyciski myszy.</td>
</tr>
<tr>
<td>Przycisk myszy 2</td>
<td>Prawy przycisk myszy.</td>
</tr>
<tr>
<td>Przycisk myszy 3</td>
<td>Przycisk środkowej myszy.</td>
</tr>
Nazwa

Jeśli użytkownik nie naciska żadnego przycisku myszy, gdy funkcja jest wywoływana, zwróci pustą listę.

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.


Zwroty

Zbiór InputObjects odpowiadający przyciskom myszy, które są obecnie przytrzymywane.

Przykłady kodu

This example checks if the user pressed MouseButton1 (left), MouseButton2 (right), or both mouse buttons. This can be extended to behave differently depending on which mouse buttons are pressed, including MouseButton3 (middle).

Check Pressed Mouse Buttons

local UserInputService = game:GetService("UserInputService")
UserInputService.InputBegan:Connect(function(input, gameProcessedEvent)
-- Return an array of the pressed mouse buttons
local buttonsPressed = UserInputService:GetMouseButtonsPressed()
local m1, m2 = false, false
for _, button in buttonsPressed do
if button.UserInputType == Enum.UserInputType.MouseButton1 then
print("MouseButton1 pressed!")
m1 = true
end
if button.UserInputType == Enum.UserInputType.MouseButton2 then
print("MouseButton2 pressed!")
m2 = true
end
if m1 and m2 then
print("Both mouse buttons pressed!")
end
end
end)

GetMouseDelta

Funkcja ta zwraca zmianę, w pikselach, pozycji gracza Mouse w ostatnim renderowanym ramie jako Vector2.Funkcja ta działa tylko wtedy, gdy mysz została zablokowana za pomocą właściwości UserInputService.MouseBehavior.Jeśli mysz nie została zablokowana, wartości zwrócone z Vector2 będą wynosić zero.

Czułość myszy, określona w ustawieniach klienta i UserInputService.MouseDeltaSensitivity, wpłynie na wynik.

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.


Zwroty

Zmiana ruchu myszy.

Przykłady kodu

The following example measures any mouse movement in pixels from the last render step to the current render step. If the user has set their camera sensitivity to be higher or lower than 1 in the experience's menu, it will affect the returned value.

Getting Mouse Delta

local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
local function onRenderStep()
local delta = UserInputService:GetMouseDelta()
if delta ~= Vector2.new(0, 0) then
print("The mouse has moved", delta, "since the last step")
end
end
RunService:BindToRenderStep("MeasureMouseMovement", Enum.RenderPriority.Input.Value, onRenderStep)

GetMouseLocation

Funkcja ta zwraca Vector2 reprezentującą obecną lokalizację ekranu gracza Mouse w pikselach względem lewego górnego kąta.Nie uwzględnia to Enum.ScreenInsets ; aby uzyskać wstawki górne lewe i dolne prawe, wezwij GuiService:GetGuiInset() .

Jeśli położenie wskaźnika myszy jest poza ekranem lub urządzenie gracza nie ma myszy, wartość zwrócona zostanie nieokreślona.

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.


Zwroty

A Vector2 reprezentujący obecną lokalizację ekranu myszy, w pikselach.

GetNavigationGamepads

Funkcja ta zwraca tablicę gamepadów UserInputTypes, które są połączone i włączone do nawigacji GUI.Lista ta jest w kolejności malejącego priorytetu, co oznacza, że można ją powtarzać, aby określić, który gamepad powinien mieć kontrolę nawigacji.

Czy połączony gamepad jest gamepadem nawigacyjnym określa tylko, który gamepad kontroluje interfejsy nawigacyjne.Nie wpływa to na sterowanie nawigacją.

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.

Zobacz także:


Zwroty

Zbiór UserInputTypes, który może być używany do nawigacji GUI, w kolejności malejącej priorytetu.

GetStringForKeyCode

GetStringForKeyCode zwraca ciąg reprezentujący klucz, który użytkownik powinien nacisnąć, aby wprowadzić dany Enum.KeyCode, biorąc pod uwagę ich układ klawiatury.Dla kluczowych kodów, które wymagają utrzymania jakiegoś modyfikatora, funkcja ta zwraca klucz, który należy nacisnąć oprócz modyfikatora.Zobacz przykłady poniżej dla dalszego wyjaśnienia.

Podczas używania Roblox z układem klawiatury nie-QWERTY kody kluczy są mapowane do równoważnych pozycji QWERTY.Na przykład naciśnięcie A na klawiaturze AZERTY skutkuje Enum.KeyCode.Q.Ta mapowanie może prowadzić do niezgodnych informacji na temat elementów interfejsu użytkownika doświadczenia.Na przykład "Naciśnij M, aby otworzyć mapę" jest niepoprawne na klawiaturze AZERTY; musiałoby to być "Naciśnij ?, aby otworzyć mapę", co jest w tym samym miejscu, co M na QWERTY.Funkcja ta rozwiązuje ten problem, zapewniając rzeczywisty klucz, który należy nacisnąć podczas korzystania z nie-QWERTY układów klawiatury.


local UserInputService = game:GetService("UserInputService")
local textLabel = script.Parent
local mapKey = Enum.KeyCode.M
textLabel.Text = "Press " .. UserInputService:GetStringForKeyCode(mapKey) .. " to open the map"
Przykłady na klawiaturze QWERTY

<th>Wartość zwrotna</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Enum.KeyCode.Q</code></td>
<td><code>Q</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.W</code></td>
<td><code>W</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.Equals</code></td>
<td><code>=</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.At</code></td>
<td><code>2</code> ponieważ <code>@</code> jest wpisane z <kbd>Shift</kbd><kbd>2</kbd></td>
</tr>
</tbody>
Kod klucza
Przykłady na klawiaturze AZERTY

<th>Wartość zwrotna</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Enum.KeyCode.Q</code></td>
<td><code>A</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.W</code></td>
<td><code>Z</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.Equals</code></td>
<td><code>=</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.At</code></td>
<td><code>É</code></td>
</tr>
</tbody>
Kod klucza
Użycie gamepada

GetStringForKeyCode() zwraca mapę strun dla Enum.KeyCode najbardziej ostatnio podłączonego gamepada.Jeśli połączony kontroler nie jest wspierany, funkcja zwraca domyślną konwersję strun dla żądanego kodu klucza.

Poniższy przykład pokazuje, jak można mapować niestandardowe zasoby dla ButtonA :


local UserInputService = game:GetService("UserInputService")
local imageLabel = script.Parent
local key = Enum.KeyCode.ButtonA
local mappings = {
ButtonA = "rbxasset://BUTTON_A_ASSET", -- Replace with the desired ButtonA asset
ButtonCross = "rbxasset://BUTTON_CROSS_ASSET" -- Replace with the desired ButtonCross asset
}
local mappedKey = UserInputService:GetStringForKeyCode(key)
local image = mappings[mappedKey]
imageLabel.Image = image
Mapowanie klawiatury gry

Kody klawiszy padu kierunkowego nie różnią się w zależności od urządzenia.Enum.KeyCode.ButtonSelect ma nieco inne zachowanie w niektórych przypadkach.Użyj obu map PlayStation, aby użytkownicy widzieli poprawne przyciski.


<th>Wartość zwrotu PlayStation</th>
<th>Wartość zwrotu Xbox</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Enum.KeyCode.ButtonA</code></td>
<td><code>PrzyciskCross</code></td>
<td><code>PrzyciskA</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonB</code></td>
<td><code>Koło przycisków</code></td>
<td><code>PrzyciskB</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonX</code></td>
<td><code>Przycisk kwadratowy</code></td>
<td><code>PrzyciskX</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonY</code></td>
<td><code>Przycisk Trójkąt</code></td>
<td><code>PrzyciskY</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonL1</code></td>
<td><code>Przycisk L1</code></td>
<td><code>PrzyciskLB</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonL2</code></td>
<td><code>Przycisk L2</code></td>
<td><code>PrzyciskLT</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonL3</code></td>
<td><code>Przycisk L3</code></td>
<td><code>PrzyciskiLS</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonR1</code></td>
<td><code>Przycisk R1</code></td>
<td><code>PrzyciskRB</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonR2</code></td>
<td><code>Przycisk R2</code></td>
<td><code>PrzyciskRT</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonR3</code></td>
<td><code>Przycisk R3</code></td>
<td><code>PrzyciskRS</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonStart</code></td>
<td><code>Opcje przycisków</code></td>
<td><code>Przycisk Start</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonSelect</code></td>
<td><code>Pasek dotykowy przycisków</code> i <code>Przycisk Udostępnij</code></td>
<td><code>Przycisk wyboru</code></td>
</tr>
</tbody>
Kod klucza
Obrazy systemowe dla KeyCodes

Kiedy używasz Enum.KeyCode, które można lepiej reprezentować jako obraz, na przykład dla ImageLabel w interfejsie użytkownika, możesz użyć następujących ikonek dziedzictwa.Zaleca się jednak, abyś użył GetImageForKeyCode() jako bardziej nowoczesnej, wieloplatformowej metody odzyskiwania ikon kontrolera Xbox i PlayStation.


<th>Obraz</th>
<th>ID zasobu</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Enum.KeyCode.ButtonX</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxX.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxX.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonY</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxY.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxY.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonA</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxA.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxA.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonB</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxB.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxB.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.DPadLeft</code></td>
<td>
<img src="../../../assets/scripting/controls/dpadLeft.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/dpadLeft.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.DPadRight</code></td>
<td>
<img src="../../../assets/scripting/controls/dpadRight.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/dpadRight.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.DPadUp</code></td>
<td>
<img src="../../../assets/scripting/controls/dpadUp.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/dpadUp.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.DPadDown</code></td>
<td>
<img src="../../../assets/scripting/controls/dpadDown.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/dpadDown.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.ButtonSelect</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxView.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxView.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.ButtonStart</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxmenu.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxmenu.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonL1</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxLB.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxLB.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonR1</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxRB.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxRB.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.ButtonL2</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxLT.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxLT.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonR2</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxRT.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxRT.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.ButtonL3</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxLS.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxLS.png</code></td>
</tr>
<tr>
<td><code>Enum.KeyCode.ButtonR3</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxRS.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxRS.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.Thumbstick1</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxLSDirectional.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxLSDirectional.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.Thumbstick2</code></td>
<td>
<img src="../../../assets/scripting/controls/xboxRSDirectional.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/xboxRSDirectional.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.Backspace</code></td>
<td>
<img src="../../../assets/scripting/controls/backspace.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/backspace.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.Return</code></td>
<td>
<img src="../../../assets/scripting/controls/return.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/return.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.LeftShift</code></td>
<td>
<img src="../../../assets/scripting/controls/shift.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/shift.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.RightShift</code></td>
<td>
<img src="../../../assets/scripting/controls/shift.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/shift.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.Tab</code></td>
<td>
<img src="../../../assets/scripting/controls/tab.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/tab.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.Quote</code></td>
<td>
<img src="../../../assets/scripting/controls/apostrophe.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/apostrophe.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.Comma</code></td>
<td>
<img src="../../../assets/scripting/controls/comma.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/comma.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.Backquote</code></td>
<td>
<img src="../../../assets/scripting/controls/graveaccent.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/graveaccent.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.Okres</code></td>
<td>
<img src="../../../assets/scripting/controls/period.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Controls/period.png</code></td>
</tr>
<tr>
<td><code>Kumulacja.KeyCode.Space</code></td>
<td>
<img src="../../../assets/scripting/controls/spacebar.png" width="24">
</img>
</td>
<td><code>rbxasset://textures/ui/Kontrolki/przestrzeń baru.png</code></td>
</tr>
</tbody>
Kod klucza

Parametry

keyCode: Enum.KeyCode
Wartość domyślna: ""

Zwroty

GetSupportedGamepadKeyCodes

Funkcja ta zwraca tablicę KeyCodes, która jest wspierana przez gamepad związany z danym Enum.UserInputType .

Funkcja ta może być używana do określenia, które klawisze są wspierane, a które nie są wspierane przez połączoną konsolę.Aby określić, czy określony KeyCode jest wspierany, użyj UserInputService:GamepadSupports().

Jeśli wezwano nieistniejący lub nie połączony gamepad, ta funkcja zwróci pustą listę.

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.

Zobacz także:

Parametry

gamepadNum: Enum.UserInputType

The Enum.UserInputType z gamepada.

Wartość domyślna: ""

Zwroty

Zbiór KeyCodes wspierany przez podany gamepad.

Przykłady kodu

Ten przykład otrzymuje listę gier nawigacyjnych i listę ich wspieranych Enum.KeyCodes.Następnie iteruje przez wspieraną listę KeyCode i wiąże klawisze ButtonX i X z funkcjami, jeśli są one wspierane przez gamepad za pomocą ContextActionService.

Wiązanie wspieranych klawisz klawiatury gry

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
-- Ponieważ ta funkcja nie zwraca nic, ten przełącznik będzie
-- „zmyj” wejście, a po nim nie zostanie wezwany żaden inny menedżer akcji
-- ten jeden.
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

IsGamepadButtonDown

Funkcja ta sprawdza, czy naciśnięto określony przycisk na określonym gamepadzie.Zwraca true jeśli gamepad ma wciśnięte określone button, w przeciwnym razie zwraca fałsz.

Prawidłowe typy wejść użytkownika

Wskazany gamepad powinien być jedną z następujących wartości enum typu wejścia użytkownika:


<tr>
<td>Enum.UserInputType.Gamepad1-8</td>
</tr>
Nazwa
Ważne klawiatury kluczowe

Wskazany przycisk powinien być jedną z następujących wartości enum KeyCodes:


<tr>
<td>Enum.KeyCode.ButtonX</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonY</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonA</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonB</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonR1</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonL1</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonR2</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonL2</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonR3</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonL3</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonStart</td>
</tr>
<tr>
<td>Enum.KeyCode.ButtonSelect</td>
</tr>
<tr>
<td>Enum.KeyCode.DPadLeft</td>
</tr>
<tr>
<td>Enum.KeyCode.DPadRight</td>
</tr>
<tr>
<td>Enum.KeyCode.DPadUp</td>
</tr>
<tr>
<td>Enum.KeyCode.DPadDown</td>
</tr>
Nazwa

Można tego użyć, aby sprawdzić, czy konkretny przycisk, tak jak A, jest przytrzymywany. Na przykład:


local UserInputService = game:GetService("UserInputService")
local button = Enum.KeyCode.ButtonA
local gamepad = Enum.UserInputType.Gamepad1
local isButtonHeld = UserInputService:IsGamepadButtonDown(gamepad, button)

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.

Zobacz także:

Parametry

gamepadNum: Enum.UserInputType

The Enum.UserInputType z podanego gamepada.

Wartość domyślna: ""
gamepadKeyCode: Enum.KeyCode

The Enum.KeyCode z określonym przyciskiem.

Wartość domyślna: ""

Zwroty

Czy określony przycisk na gamepadzie na podanym gamepadzie jest naciśnięty, jest naciśnięty.

IsKeyDown

Funkcja ta zwraca, czy użytkownik przytrzymuje klawisz związane z danym Enum.KeyCode .Zwraca true jeśli określony klucz zostanie naciśnięty lub false jeśli nie zostanie naciśnięty.

Można to użyć do sprawdzenia, czy naciśnięto określoną klawisz, taką jak spacja, na przykład:


local UserInputService = game:GetService("UserInputService")
local spaceHeld = UserInputService:IsKeyDown(Enum.KeyCode.Space)

Aby odzyskać listę wszystkich naciśniętych klawiszy przez użytkownika, użyj funkcji UserInputService:GetKeysPressed().

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.

Zobacz także:

Parametry

keyCode: Enum.KeyCode

The Enum.KeyCode klucza.

Wartość domyślna: ""

Zwroty

Czy określony klucz jest przytrzymywany.

IsMouseButtonPressed

Funkcja ta przyjmuje przycisk myszy Enum.UserInputType i zwraca bool, który wskazuje, czy jest obecnie naciśnięty.

Przycisk myszy sprawdzony zależy od wartości Enum.UserInputType przekazanej do funkcji jako argument. Na przykład:


local UserInputService = game:GetService("UserInputService")
local pressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1)

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript."

Parametry

mouseButton: Enum.UserInputType

The Enum.UserInputType z przycisku myszy.

Wartość domyślna: ""

Zwroty

Czy dany przycisk myszy jest obecnie przytrzymywany.

IsNavigationGamepad

Funkcja ta zwraca true, jeśli określony Enum.UserInputType gamepad jest dozwolony do kontroli nawigacji i wyboru GuiObjects .

Jeśli chcesz ustawić gamepad nawigacyjny, możesz użyć UserInputService:SetNavigationGamepad(). Możesz także użyć UserInputService:GetNavigationGamepads() , aby uzyskać listę wszystkich gamepadów nawigacyjnych.

Na przykład kod poniżej sprawdza, czy gamepad1 jest jako gamepad nawigacyjny:


local UserInputService = game:GetService("UserInputService")
if UserInputService:IsNavigationGamepad(UserInputType.Gamepad1) then
print("Gamepad is a navigation gamepad!")
else
print("Gamepad is not a navigation gamepad!")
end

Listę wszystkich połączonych gamepadów, niezależnie od nawigacji, można odzyskać za pomocą `UserInput/GetConnectedGamepads.

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.

Zobacz także:

Parametry

gamepadEnum: Enum.UserInputType

The Enum.UserInputType z określonego gamepada.

Wartość domyślna: ""

Zwroty

Czy określony gamepad jest gamepadem nawigacyjnym.

RecenterUserHeadCFrame

()

Funkcja ta odśrodkowuje CFrame słuchawki VR do obecnego kierunku noszenia słuchawki przez użytkownika.Oznacza to, że obecna orientacja słuchawki jest ustawiona na CFrame.new() .

Użyj tej funkcji, aby przenieść słuchawki CFrame do centrum obszaru odtwarzania, jeśli wydają się być na dziwnym przesunięciu.

Zachowuje się to identycznie do funkcji Class.VRService``Class.VRService:RecenterUserHeadCFrame().

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.


Zwroty

()

SetNavigationGamepad

()

Funkcja SetNavigationGamepad określa, czy określony Enum.UserInputType gamepad może przesuwać nawigator GUI.Gamepad, który może przesuwać nawigator GUI, jest uważany za gamepad nawigacyjny.

Jeśli argument włączony jest przekazany jako true, Gamepad może przesuwać nawigator GUI.Jeśli argument wynosi false, Gamepad nie może przesuwać nawigatora GUI.

Jeśli chcesz sprawdzić, czy określona konsola jest ustawiona jako konsola nawigacyjna, możesz użyć funkcji UserInputService:IsNavigationGamepad().Możesz także użyć UserInputService:GetNavigationGamepads() aby odzyskać listę wszystkich paseków nawigacyjnych.

Ponieważ UserInputService jest tylko po stronie klienta, ta funkcja może być używana tylko w LocalScript.

Zobacz także:

Parametry

gamepadEnum: Enum.UserInputType

The Enum.UserInputType z określonego gamepada.

Wartość domyślna: ""
enabled: boolean

Czy określony gamepad może przesuwać nawigator GUI.

Wartość domyślna: ""

Zwroty

()

Przykłady kodu

Ten przykład ustawia Gamepad1 jako gamepad nawigacyjny, przekazując Enum.UserInputType.Gamepad1 i true jako argumenty.

Usługa wpisu użytkownika: Ustaw nawigacyjny gamepad

local UserInputService = game:GetService("UserInputService")
UserInputService:SetNavigationGamepad(Enum.UserInputType.Gamepad1, true)

Zdarzenia

DeviceAccelerationChanged

Wydarzenie DeviceAccelerationChanged występuje, gdy użytkownik przesuwa urządzenie, które ma akcelerometr.

Akcelerometr to komponent znajdujący się w większości urządzeń mobilnych, który mierzy przyspieszenie (zmianę prędkości).

Aby określić, czy urządzenie użytkownika ma akcelerometr włączony, zobacz UserInputService.AccelerometerEnabled .

Wydarzenie to można wykorzystać do śledzenia ruchu urządzenia, które ma akcelerometr.Przykładowe użycie obejmuje przesuwanie postaci gracza, gdy urządzenie mobilne przyspiesza.

Ponadto to wydarzenie można używać wraz z UserInputService:GetDeviceAcceleration(), aby określić obecny ruch urządzenia użytkownika, jeśli urządzenie ma akcelerometr.

To wydarzenie uruchamia się tylko lokalnie - co oznacza, że tylko gracz, którego urządzenie się porusza, może korzystać z wydarzenia i będzie działać tylko w LocalScript .

Parametry

acceleration: InputObject

An InputObject , z UserInputType z "akcelerometrem" i Position , który pokazuje siłę grawitacji na każdej osi lokalnego urządzenia.


Przykłady kodu

This example uses the accelerometer to move the player character when a mobile device is accelerated. The character will move along the axis that the device was moved.

Control Players Using the Accelerometer

local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local SENSITIVITY = 0.2
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local ready = true
local function changeAcceleration(acceleration)
if ready then
ready = false
local accel = acceleration.Position
if accel.Y >= SENSITIVITY then
humanoid.Jump = true
end
if accel.Z <= -SENSITIVITY then
humanoid:Move(Vector3.new(-1, 0, 0))
end
if accel.Z >= SENSITIVITY then
humanoid:Move(Vector3.new(1, 0, 0))
end
if accel.X <= -SENSITIVITY then
humanoid:Move(Vector3.new(0, 0, 1))
end
if accel.X >= SENSITIVITY then
humanoid:Move(Vector3.new(0, 0, -1))
end
task.wait(1)
ready = true
end
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceAccelerationChanged:Connect(changeAcceleration)
end

DeviceGravityChanged

Wydarzenie UserInputService.DeviceGravityChanged uruchamia się, gdy grawitacja urządzenia Vector3 zmienia się na urządzeniu, które ma akcelerometer.

Wektor grawitacji urządzenia reprezentuje siłę grawitacji na każdym z osi X, Y i Z urządzenia.Choć grawitacja nigdy się nie zmienia, siła wywierana na każdej osi zmienia się, gdy urządzenie się obraca i zmienia orientację.Wartość siły wywierana na każdej osi jest wektorem jednostek w przedziale od -1 do 1.

Akcelerometr to komponent znajdujący się w większości urządzeń mobilnych, który mierzy przyspieszenie (zmianę prędkości).

Wydarzenie to można wykorzystać do określenia rzeczywistego kierunku siły grawitacji na urządzeniu użytkownika.Można go nawet użyć do symulacji siły grawitacji na urządzeniu użytkownika w grze, tak jak na obiektach w grze (zobacz przykład poniżej).

Aby sprawdzić, czy urządzenie użytkownika ma włączony akcelerometr, zobacz UserInputService.AccelerometerEnabled .Jeśli urządzenie ma włączony akcelerometr, możesz użyć funkcji UserInputService:GetDeviceGravity(), aby uzyskać obecną siłę grawitacji na urządzeniu użytkownika.

Parametry

gravity: InputObject

An InputObject , z właściwością InputObject.Position pokazującą siłę grawitacji na każdej osi lokalnego urządzenia.Pozycja ta może być użyta jako kierunek do określenia kierunku grawitacji względem urządzenia.


Przykłady kodu

This code adds a force on a part so that it falls in the direction of actual gravity relative to the user's device. In order for this example to work as expected, it must be placed in a LocalScript and the user's device must have an accelerometer.

Move a Ball using the Accelerometer

local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end

DeviceRotationChanged

Wydarzenie DeviceRotationChanged występuje, gdy użytkownik obraca urządzenie, które ma akcelerometr.

Gyroskop to komponent znajdujący się w większości urządzeń mobilnych, które wykrywają orientację i prędkość obrotową.

Wydarzenie jest przydatne przy śledzeniu orientacji urządzenia i sposobu zmian, gdy użytkownik obraca urządzenie.Aby określić obecną rotację urządzenia, możesz użyć funkcji UserInputService:GetDeviceRotation().

Aby sprawdzić, czy urządzenie użytkownika ma włączony akcelerometr i czy wydarzenie zostanie uruchomione, zobacz UserInputService.GyroscopeEnabled .

To wydarzenie uruchamia się tylko wtedy, gdy okno klienta Roblox jest w focusie. Na przykład wejścia nie zostaną zarejestrowane, gdy okno zostanie zmniejszone.

Parametry

rotation: InputObject

An InputObject dostarczający informacje o rotacji urządzenia.InputObject.Position reprezentuje nową rotację wartością pozycyjną Vector3 i InputObject.Delta reprezentuje zmianę w rotacji w wartości pozycyjnej Vector3.

cframe: CFrame

A CFrame reprezentująca obecną orientację urządzenia.


Przykłady kodu

This code adds a force on a part so that it falls in the direction of actual gravity relative to the user's device. In order for this example to work as expected, it must be placed in a LocalScript and the user's device must have an accelerometer.

Move a Ball using the Accelerometer

local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local ball = script.Parent:WaitForChild("Ball")
local mass = ball:GetMass()
local gravityForce = ball:WaitForChild("GravityForce")
local function moveBall(gravity)
gravityForce.Force = gravity.Position * Workspace.Gravity * mass
end
if UserInputService.AccelerometerEnabled then
UserInputService.DeviceGravityChanged:Connect(moveBall)
end

GamepadConnected

Wydarzenie GamepadConnected występuje, gdy gamepad jest podłączony do klienta.

Ponieważ gra Roblox wspiera wiele kontrolerów, wydarzenie to jest przydatne, gdy połączone z wydarzeniem UserInputService.GamepadDisconnected śledzi, które kontrolery/gadżety są aktywne.Możesz także użyć UserInputService:GetConnectedGamepads(), aby znaleźć poprawną konsolę do użycia.

Poniższy przykład pokazuje przykład użycia śledzenia, gdy gamepad jest podłączony do klienta.


local UserInputService = game:GetService("UserInputService")
local function GamepadConnected(gamepad)
print("Player has plugged controller: " .. tostring(gamepad))
end)
UserInputService.GamepadConnected:Connect(GamepadConnected)

Jeśli chcesz zobaczyć, które urządzenia są podłączone, możesz użyć funkcji UserInputService:GetConnectedGamepads().

Ponieważ to wydarzenie wystrzeliwuje lokalnie, może być używane tylko w LocalScript.

Zobacz także:

Parametry

gamepadNum: Enum.UserInputType

The Enum.UserInputType z połączonego gamepada.


GamepadDisconnected

Wydarzenie GamepadDisconnected występuje, gdy gamepad jest odłączony.

Ponieważ gra Roblox wspiera wiele kontrolerów, wydarzenie to jest przydatne, gdy połączone z wydarzeniem UserInputService.GamepadConnected śledzi, które kontrolery/gadżety są aktywne.Możesz także użyć UserInputService:GetConnectedGamepads(), aby znaleźć poprawną konsolę do użycia.

Poniższy przykład pokazuje przykład użycia śledzenia, gdy gamepad jest odłączony od klienta.


local UserInputService = game:GetService("UserInputService")
local function GamepadDisconnected(gamepad)
print("Player has unplugged controller: " .. tostring(gamepad))
end)
UserInputService.GamepadDisconnected:Connect(GamepadDisconnected)

Ponieważ to wydarzenie wystrzeliwuje lokalnie, może być używane tylko w LocalScript.

Zobacz także:

Parametry

gamepadNum: Enum.UserInputType

The Enum.UserInputType z odłączonego gamepada.


InputBegan

Wydarzenie InputBegan wystrzeliwuje się, gdy użytkownik zaczyna interakcję za pomocą urządzenia interfejsu człowiek-komputer (przycisk myszy w dół, dotknięcie początku, przycisk klawiatury w dół itp.).

Można go używać do śledzenia początku interakcji użytkownika, takich jak po raz pierwszy interakcja z elementem interfejsu graficznego, gamepadem itp.Nie rejestruje ruchów koła myszy.

To wydarzenie można używać wraz z UserInputService.InputChanged i UserInputService.InputEnded do śledzenia, kiedy rozpoczyna się wejście użytkownika, zmiany i kończy.

To wydarzenie uruchamia się tylko wtedy, gdy okno klienta Roblox jest w focusie. Na przykład wejścia nie zostaną zarejestrowane, gdy okno zostanie zmniejszone.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Parametry

Instancja InputObject, która zawiera informacje o wejściu użytkownika.

gameProcessedEvent: boolean

Wskazuje, czy silnik gry obserwował wewnętrznie ten wejściowy sygnał i działał na nim.Ogólnie odnosi się to do przetwarzania interfejsu użytkownika, więc jeśli przycisk został dotknięty lub kliknięty z tego wpisu, gameProcessedEvent byłby true.To samo dotyczy wydarzeń wejściowych połączonych za pomocą ContextActionService .


Przykłady kodu

Poniższy przykład pokazuje jeden z wielu przykładów użycia obsługi wejścia użytkownika z InputBegan w zależności od jego typu.

Przetwarzanie wejścia Began

-- Aby skorzystać z wydarzenia InputBegan, należy używać usługi UserInputService
local UserInputService = game:GetService("UserInputService")
-- Próbna funkcja dostarczająca wiele przypadków użycia dla różnych rodzajów wejść użytkownika
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)

InputChanged

Wydarzenie InputChanged występuje, gdy użytkownik zmienia sposób interakcji za pomocą urządzenia interfejsu człowiek-komputer (przycisk myszy w dół, dotknięcie początku, przycisk klawiatury w dół itp.).

Aby ignorować wydarzenia obsługiwane automatycznie przez Roblox, takie jak przewijanie w ScrollingFrame, sprawdź, czy argument gameProcessedEvent jest fałszywy.To wydarzenie można używać wraz z UserInputService.InputBegan i UserInputService.InputEnded, aby śledzić, kiedy rozpoczyna się wejście użytkownika, zmiany i kończy.

To wydarzenie uruchamia się tylko wtedy, gdy okno klienta Roblox jest w focusie. Na przykład wejścia nie zostaną zarejestrowane, gdy okno zostanie zmniejszone.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Parametry

Instancja InputObject, która zawiera informacje o wejściu użytkownika.

gameProcessedEvent: boolean

Wskazuje, czy silnik gry obserwował wewnętrznie ten wejściowy sygnał i działał na nim.Ogólnie odnosi się to do przetwarzania interfejsu użytkownika, więc jeśli przycisk został dotknięty lub kliknięty z tego wpisu, gameProcessedEvent byłby true.To samo dotyczy wydarzeń wejściowych połączonych za pomocą ContextActionService .


InputEnded

Wydarzenie InputEnded występuje, gdy użytkownik przestaje interakcjonować za pomocą urządzenia interfejsu człowiek-komputer (przycisk myszy w dół, dotknięcie początku, przycisk klawiatury w dół itp.).Jest to przydatne, gdy śledzisz, kiedy użytkownik wypuści klawisz klawiatury, przycisk myszy, wejście dotykowe itp.

To wydarzenie można używać wraz z UserInputService.InputBegan i UserInputService.InputChanged do śledzenia, kiedy rozpoczyna się wejście użytkownika, zmiany i kończy.

To wydarzenie uruchamia się tylko wtedy, gdy okno klienta Roblox jest w focusie. Na przykład wejścia nie zostaną zarejestrowane, gdy okno zostanie zmniejszone.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Parametry

Instancja InputObject, która zawiera informacje o wejściu użytkownika.

gameProcessedEvent: boolean

Wskazuje, czy silnik gry obserwował wewnętrznie ten wejściowy sygnał i działał na nim.Ogólnie odnosi się to do przetwarzania interfejsu użytkownika, więc jeśli przycisk został dotknięty lub kliknięty z tego wpisu, gameProcessedEvent byłby true.To samo dotyczy wydarzeń wejściowych połączonych za pomocą ContextActionService .


JumpRequest

Wydarzenie UserInputService JumpRequest występuje, gdy pojawi się żądanie skoku z klienta, na przykład gdy klient naciśnie spacji lub przycisk skoku na urządzeniu mobilnym.

To wydarzenie wystrzeliwuje się za każdym razem, gdy użytkownik próbuje wykonać swój skok Player.Character.Domyślne zachowanie odpowiada na prośbę o skok ustawiając właściwość gracza Humanoid.Jump na prawdę, co powoduje skok postaci gracza.

Wydarzenie może być używane do śledzenia każdego razu, gdy gracz chce skoczyć.Zamiast używać go, aby sprawić, że gracz skocze, powinien być używany do zmiany domyślnego zachowania skoku - na przykład wyłączenia skoku.

Na przykład kod poniżej drukuje „Skok” za każdym razem, gdy gracz wysyła prośbę o skok.


local UserInputService = game:GetService("UserInputService")
function onJumpRequest()
print("Jump!")
end
UserInputService.JumpRequest:Connect(onJumpRequest)

Ponieważ to wydarzenie wystrzeliwuje wielokrotnie dla pojedynczej prośby o skok, zaleca się użycie debounce.

Jeśli chcesz połączyć klawisze lub przyciski z innymi działaniami, rozważ użycie wydarzeń takich jak UserInputService:GetKeysPressed() i UserInputService.InputBegan lub ContextActionService.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.


Przykłady kodu

Ten przykład kodu wyłącza skakanie dla LocalPlayer poprzez ustawienie stanu Enum.HumanoidStateType.Jumping na fałsz.Ustawienie tego stanu na fałsz, gdy użytkownik próbuje skoczyć, anuluje skok.

Aby ten przykład działał zgodnie z oczekiwaniem, należy go umieścić w LocalScript.

Wyłącz skakanie

local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
-- Wystrzeliwuje, gdy użytkownik próbuje skoczyć
local function jump()
humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false)
end
UserInputService.JumpRequest:Connect(jump)

LastInputTypeChanged

Wydarzenie UserInputService.LastInputTypeChanged uruchamia się za każdym razem, gdy klient zmienia sposób interakcji za pomocą urządzenia interfejsu człowiek-komputer.(i.e.od MouseMovement do MouseWheel lub od Thumbstick1 do Thumbstick2).

Aby uzyskać wartość ostatniego typu wejścia, niezależnie od tego, czy się zmienił, możesz użyć funkcji UserInputService:GetLastInputType().

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Parametry

lastInputType: Enum.UserInputType

A Enum.UserInputType wskazujący ostatni typ wejścia.


Przykłady kodu

This example hides the mouse icon while the player beings using their keyboard, such as to chat or enter text into a TextBox. The mouse icon reappears when the user resumes mouse input.

This uses the LastInputType() event to determine when the user begins keyboard input and mouse input - based on the value of the lastInputType argument.

In order for this example to work as expected, it should be placed in a LocalScript.

Hide Mouse During Keyboard Input

local UserInputService = game:GetService("UserInputService")
local mouseInput = {
Enum.UserInputType.MouseButton1,
Enum.UserInputType.MouseButton2,
Enum.UserInputType.MouseButton3,
Enum.UserInputType.MouseMovement,
Enum.UserInputType.MouseWheel,
}
local keyboard = Enum.UserInputType.Keyboard
local function toggleMouse(lastInputType)
if lastInputType == keyboard then
UserInputService.MouseIconEnabled = false
return
end
for _, mouse in pairs(mouseInput) do
if lastInputType == mouse then
UserInputService.MouseIconEnabled = true
return
end
end
end
UserInputService.LastInputTypeChanged:Connect(toggleMouse)

PointerAction

Akcja wskazania wystrzeliwuje się, gdy użytkownik wykonuje określoną akcję wskazania. W szczególności przewijanie koła myszy.

Parametry

wheel: number
pan: Vector2
pinch: number
gameProcessedEvent: boolean

TextBoxFocusReleased

Wydarzenie TextBoxFocusReleased występuje, gdy klient traci skupienie na TextBox , zwykle gdy klient zatrzymuje wpisanie tekstu, naciskając powrót lub klikając/dotykając gdzie indziej na ekranie.

Na przykład kod poniżej drukuje nazwę TextBox tracącego koncentrację, gdy wydarzenie się uruchamia.


local UserInputService = game:GetService("UserInputService")
function TextBoxFocusReleased(textbox)
print(textbox.Name)
end
UserInputService.TextBoxFocusReleased:Connect(TextBoxFocusReleased)

Można go używać obok UserInputService.TextBoxFocused, aby śledzić, kiedy TextBox zyskuje i traci koncentrację.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Zobacz także

Parametry

textboxReleased: TextBox

The TextBox które straciły koncentrację.


TextBoxFocused

To wydarzenie wystrzeliwuje się, gdy uzyska się skupienie na TextBox, zwykle gdy klient kliknie/dotknie pola tekstowego, aby rozpocząć wpisywanie tekstu.Wystrzeliwuje to również, jeśli skupienie pola tekstowego jest skupione za pomocą TextBox:CaptureFocus() .

Na przykład kod poniżej drukuje nazwę TextBox skupioną, gdy wydarzenie się uruchamia.


local UserInputService = game:GetService("UserInputService")
function TextBoxFocused(textbox)
print(textbox.Name)
end)
UserInputService.TextBoxFocused:Connect(TextBoxFocused)

Można go używać obok UserInputService.FocusReleased, aby śledzić, kiedy tekstowe pole zyskuje i traci skupienie.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Zobacz także

Parametry

textboxFocused: TextBox

The TextBox które zyskały uwagę.


TouchDrag

Parametry

dragDirection: Enum.SwipeDirection
numberOfTouches: number
gameProcessedEvent: boolean

TouchEnded

Wydarzenie TouchEnded występuje, gdy użytkownik uwolnił palec z ekranu urządzenia z włączonym dotykiem, kończąc wpisywanie dotyku za pomocą urządzenia.

Wydarzenie to można wykorzystać do określenia, kiedy użytkownik przestaje dotykać ekranu swojego urządzenia.Można go połączyć z UserInputService.TouchStarted, aby określić, kiedy użytkownik zaczyna i kończy dotykanie ekranu.

Na przykład kod poniżej drukuje pozycję ekranu, w której użytkownik przestaje dotykać ekranu.


local UserInputService = game:GetService("UserInputService")
function TouchEnded(touch, gameProcessedEvent)
print("Touch ended at " .. tostring(touch.Position))
end
UserInputService.TouchEnded:Connect(TouchEnded)

Obiekt wejścia dotykowego jest taki sam obiekt wejścia przez cały czas trwania dotyku.Więc porównanie InputObjects, gdy są obiektami dotykowymi, jest ważne, aby określić, czy jest to ten sam palec.

Aby sprawdzić, czy urządzenie użytkownika jest włączone do dotyku i czy zdarzenia dotykowe zostaną uruchomione, zobacz UserInputService.TouchEnabled .

To wydarzenie uruchamia się tylko wtedy, gdy okno klienta Roblox jest w focusie. Na przykład wejścia nie zostaną zarejestrowane, gdy okno zostanie zmniejszone.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Zobacz także:

Parametry

Instancja InputObject, która zawiera informacje o wejściu użytkownika.

gameProcessedEvent: boolean

Wskazuje, czy silnik gry obserwował wewnętrznie ten wejściowy sygnał i działał na nim.Ogólnie odnosi się to do przetwarzania interfejsu użytkownika, więc jeśli przycisk został dotknięty lub kliknięty z tego wpisu, gameProcessedEvent byłby true.To samo dotyczy wydarzeń wejściowych połączonych za pomocą ContextActionService .


TouchLongPress

Wystrzeliwany, gdy użytkownik trzyma co najmniej jeden palec przez krótki czas na tej samej pozycji ekranu urządzenia Włączone dotknięcie.

Wydarzenie to można wykorzystać do określenia, kiedy użytkownik przytrzymuje palec na ekranie w grze GuiObject lub elementie.

Poniższy przykład drukuje state długie naciśnięcie, gdy użytkownik trzyma co najmniej jeden palec przez krótki czas na tej samej pozycji ekranu.Możliwe stany obejmują: Rozpocznij , Zmień , Zakończ , Anuluj i Nic.


local UserInputService = game:GetService("UserInputService")
function TouchLongPress(TouchPositions, state, gameProcessedEvent)
print("Long press event fired. State of press: " .. tostring(state))
end
UserInputService.TouchLongPress:Connect(TouchLongPress)

Aby sprawdzić, czy urządzenie użytkownika jest włączone do dotyku i czy zdarzenia dotykowe zostaną uruchomione, zobacz UserInputService.TouchEnabled.

Można go połączyć z UserInputService.TouchStarted i UserInputService.TouchEnded, aby określić, kiedy użytkownik zaczyna i kończy dotykanie ekranu.

To wydarzenie uruchamia się tylko wtedy, gdy okno klienta Roblox jest w focusie. Na przykład wejścia nie zostaną zarejestrowane, gdy okno zostanie zmniejszone.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Zobacz także:

Parametry

touchPositions: Array

Matryca Vector2 obiektów, wskazująca pozycję palców zaangażowanych w gest.

The Enum.UserInputState of the gesture.

gameProcessedEvent: boolean

Wskazuje, czy silnik gry obserwował wewnętrznie ten wejściowy sygnał i działał na nim.Ogólnie odnosi się to do przetwarzania interfejsu użytkownika, więc jeśli przycisk został dotknięty lub kliknięty z tego wpisu, gameProcessedEvent byłby true.To samo dotyczy wydarzeń wejściowych połączonych za pomocą ContextActionService .


TouchMoved

Wystrzeliwuje, gdy użytkownik przesuwa palec na urządzeniu TouchEnabled takim jak tablet lub smartfon.

To wydarzenie jest przydatne do śledzenia, czy użytkownik przesuwa palec po ekranie, a także gdzie użytkownik przesuwa palec.

Kod poniżej pokazuje dotknięcie przesuwające się z poprzedniej pozycji do nowej pozycji na urządzeniu TouchEnabled.Zauważ, że InputObject.Position na przekazanym parametrze touch jest Vector3, ale zawiera tylko koordynaty X i Y; Z zawsze wynosi 0.


local UserInputService = game:GetService("UserInputService")
function onTouchMoved(touch, gameProcessedEvent)
local oldPosition = touch.Position - touch.Delta
print("Touch moved from " .. tostring(oldPosition) .. " to " .. tostring(touch.Position))
end
UserInputService.TouchMoved:Connect(onTouchMoved)

Połącz to wydarzenie z UserInputService.TouchStarted i UserInputService.TouchEnded w celu określenia, kiedy użytkownik zaczyna dotykać ekranu, jak jego palec się porusza podczas dotykania go, i kiedy przestaje dotykać ekranu.

Aby sprawdzić, czy urządzenie użytkownika wspiera dotyk i czy zdarzenia dotykowe zostaną uruchomione, zobacz UserInputService.TouchEnabled .

To wydarzenie uruchamia się tylko wtedy, gdy okno klienta Roblox jest w focusie. Na przykład wejścia nie zostaną zarejestrowane, gdy okno zostanie zmniejszone.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Zobacz także:

Parametry

Instancja InputObject, która zawiera informacje o wejściu użytkownika.

gameProcessedEvent: boolean

Wskazuje, czy silnik gry obserwował wewnętrznie ten wejściowy sygnał i działał na nim.Ogólnie odnosi się to do przetwarzania interfejsu użytkownika, więc jeśli przycisk został dotknięty lub kliknięty z tego wpisu, gameProcessedEvent byłby true.To samo dotyczy wydarzeń wejściowych połączonych za pomocą ContextActionService .


TouchPan

Wydarzenie TouchPan wystrzeliwuje się, gdy użytkownik przeciągnie co najmniej jeden palec na urządzeniu TouchEnabled.

Wydarzenie to można wykorzystać do określenia, kiedy użytkownik przesuwa palcem po ekranie urządzenia z włączonym dotykiem - na przykład do obrotu Camera w skrypcie niestandardowej kamery.

Poniższy kod drukuje „Prędkość przesuwania dotyku” połączoną z prędkością dotknięcia użytkownika, gdy użytkownik przesuwa palcem po ekranie.


local UserInputService = game:GetService("UserInputService")
UserInputService.TouchPan:Connect(function(touchPositions, totalTranslation, velocity, state, gameProcessedEvent)
print("Speed of touch drag: " .. tostring(velocity))
end)

Spójrz na inną przydatną funkcję UserInputService tutaj UserInputService.TouchRotate.

To wydarzenie uruchamia się tylko wtedy, gdy okno klienta Roblox jest w focusie. Na przykład wejścia nie zostaną zarejestrowane, gdy okno zostanie zmniejszone.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Zobacz także:

Parametry

touchPositions: Array

Matryca Vector2 obiektów, wskazująca pozycje dotyków (np. palców) zaangażowanych w gest.

totalTranslation: Vector2

Rozmiar gestu patelni od początku do końca (w pikselach).

velocity: Vector2

Prędkość gestu panoramy (w pikselach) na sekundę.

The Enum.UserInputState of the gesture.

gameProcessedEvent: boolean

Wskazuje, czy silnik gry obserwował wewnętrznie ten wejściowy sygnał i działał na nim.Ogólnie odnosi się to do przetwarzania interfejsu użytkownika, więc jeśli przycisk został dotknięty lub kliknięty z tego wpisu, gameProcessedEvent byłby true.To samo dotyczy wydarzeń wejściowych połączonych za pomocą ContextActionService .


TouchPinch

Wystrzeliwany, gdy użytkownik umieszcza i przesuwa dwa palce na ekranie urządzenia TouchEnabled.

Na przykład poniższy kod drukuje, jak dużo zmieniła się skala przysłonięcia kamery od początku dotknięcia.


local UserInputService = game:GetService("UserInputService")
UserInputService.TouchPinch:Connect(function(touchPositions, scale, velocity, state, gameProcessedEvent)
print("Scale difference since beginning of pinch: " .. tostring(scale))
end)

Aby sprawdzić, czy urządzenie użytkownika jest włączone do dotyku i czy zdarzenia dotykowe zostaną uruchomione, zobacz UserInputService.TouchEnabled .

To wydarzenie wystrzeliwuje tylko wtedy, gdy okno klienta Roblox jest w fokusie.Na przykład, wejścia nie zostaną zarejestrowane, gdy okno zostanie zmniejszone.Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Zobacz także:

Parametry

touchPositions: Array

Matryca Vector2s, wskazująca pozycję ekranu, w pikselach, palców zaangażowanych w gest przesuwania.

scale: number

Wielkość skurczenia od początku do końca (w pikselach) podzielona przez pozycje skurczenia początkowego.

velocity: number

Prędkość gestu przesuwania (w pikselach) na sekundę.

The Enum.UserInputState of the gesture.

gameProcessedEvent: boolean

Wskazuje, czy silnik gry obserwował wewnętrznie ten wejściowy sygnał i działał na nim.Ogólnie odnosi się to do przetwarzania interfejsu użytkownika, więc jeśli przycisk został dotknięty lub kliknięty z tego wpisu, gameProcessedEvent byłby true.To samo dotyczy wydarzeń wejściowych połączonych za pomocą ContextActionService .


TouchRotate

Wydarzenie TouchRotate występuje, gdy użytkownik obraca dwa palce na urządzeniu TouchEnabled.

Na przykład następujący kod drukuje, jak dużo kamera się obróciła od początku rotacji dotykowej.


local UserInputService = game:GetService("UserInputService")
UserInputService.TouchRotate:Connect(function(touchPositions, rotation, velocity, state, gameProcessedEvent)
print("Camera has rotated " .. tostring(rotation) .. " degrees!")
end)

Aby sprawdzić, czy urządzenie użytkownika jest włączone do dotyku i czy zdarzenia dotykowe zostaną uruchomione, zobacz UserInputService.TouchEnabled .

To wydarzenie uruchamia się tylko wtedy, gdy okno klienta Roblox jest w focusie. Na przykład wejścia nie zostaną zarejestrowane, gdy okno zostanie zmniejszone.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Główne skrypty, które kontrolują kamerę użytkownika na urządzeniu mobilnym, używają kodu, który działa podobnie do tego wydarzenia.Najlepszą praktyką dla tego wydarzenia jest jego użycie podczas tworzenia systemu kamery mobilnej, aby zastąpić domyślne skrypty rdzenia.

Zobacz także:

Parametry

touchPositions: Array

Matryca Vector2s, wskazująca pozycje palców zaangażowanych w gest.

rotation: number

Liczba stopni, w jakich ruch się obrócił od początku ruchu.

velocity: number

Zmiana w obrocie (w stopniach) podzielona przez czas trwania zmiany (w sekundach).

The Enum.UserInputState of the gesture.

gameProcessedEvent: boolean

Wskazuje, czy silnik gry obserwował wewnętrznie ten wejściowy sygnał i działał na nim.Ogólnie odnosi się to do przetwarzania interfejsu użytkownika, więc jeśli przycisk został dotknięty lub kliknięty z tego wpisu, gameProcessedEvent byłby true.To samo dotyczy wydarzeń wejściowych połączonych za pomocą ContextActionService .


TouchStarted

Wydarzenie TouchStarted uruchamia się, gdy użytkownik umieści palec na urządzeniu TouchEnabled, rozpoczynając wpisywanie dotyku za pomocą urządzenia.

Wydarzenie to można wykorzystać do określenia, kiedy użytkownik zaczyna dotykać ekranu swojego urządzenia.Można go połączyć z UserInputService.TouchEnded, aby określić, kiedy użytkownik zaczyna i kończy dotykanie ekranu.

Obiekt wejścia dotykowego jest taki sam obiekt wejścia przez cały czas trwania dotyku.Więc porównanie InputObjects, gdy są obiektami dotykowymi, jest ważne, aby określić, czy jest to ten sam palec.

Aby sprawdzić, czy urządzenie użytkownika jest włączone do dotyku i czy zdarzenia dotykowe zostaną uruchomione, zobacz UserInputService.TouchEnabled .

To wydarzenie uruchamia się tylko wtedy, gdy okno klienta Roblox jest w focusie. Na przykład wejścia nie zostaną zarejestrowane, gdy okno zostanie zmniejszone.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Zobacz także:

Parametry

Instancja InputObject, która zawiera informacje o wejściu użytkownika.

gameProcessedEvent: boolean

Wskazuje, czy silnik gry obserwował wewnętrznie ten wejściowy sygnał i działał na nim.Ogólnie odnosi się to do przetwarzania interfejsu użytkownika, więc jeśli przycisk został dotknięty lub kliknięty z tego wpisu, gameProcessedEvent byłby true.To samo dotyczy wydarzeń wejściowych połączonych za pomocą ContextActionService .


TouchSwipe

Wydarzenie TouchSwipe występuje, gdy użytkownik przesuwa palce po urządzeniu TouchEnabled.

Wydarzenie to można wykorzystać do określenia, kiedy użytkownik przesuwa palce po ekranie swojego urządzenia i kierunku, w którym przesuwał.

Aby uzyskać bardziej precyzyjne śledzenie ruchu dotykowego, użyj UserInputService.TouchMoved

Aby sprawdzić, czy urządzenie użytkownika jest włączone do dotyku i czy zdarzenia dotykowe zostaną uruchomione, zobacz UserInputService.TouchEnabled .

To wydarzenie uruchamia się tylko wtedy, gdy okno klienta Roblox jest w focusie. Na przykład wejścia nie zostaną zarejestrowane, gdy okno zostanie zmniejszone.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Zobacz także:

Parametry

swipeDirection: Enum.SwipeDirection

An Enum.SwipeDirection, wskazujący kierunek, w którym użytkownik przesuwał.

numberOfTouches: number

Liczba dotknięć (np. palców) zaangażowanych w gest.

gameProcessedEvent: boolean

Wskazuje, czy silnik gry obserwował wewnętrznie ten wejściowy sygnał i działał na nim.Ogólnie odnosi się to do przetwarzania interfejsu użytkownika, więc jeśli przycisk został dotknięty lub kliknięty z tego wpisu, gameProcessedEvent byłby true.To samo dotyczy wydarzeń wejściowych połączonych za pomocą ContextActionService .


TouchTap

Wydarzenie TouchTap wystrzeliwuje się, gdy użytkownik dotknie/dotknie palcem ekranu na urządzeniu TouchEnabled.

To wydarzenie zostanie uruchomione niezależnie od tego, czy użytkownik dotknie/dotknie świata gry lub elementu GuiObject.Jeśli szukasz wydarzenia, które wysyła się tylko wtedy, gdy użytkownik dotknie/dotknie świata gry, użyj UserInputService.TouchTapInWorld.

Aby sprawdzić, czy urządzenie użytkownika jest włączone do dotyku i czy zdarzenia dotykowe zostaną uruchomione, zobacz UserInputService.TouchEnabled .

To wydarzenie uruchamia się tylko wtedy, gdy okno klienta Roblox jest w focusie. Na przykład wejścia nie zostaną zarejestrowane, gdy okno zostanie zmniejszone.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.

Parametry

touchPositions: Array

Zbiór Vector2 obiektów, który wskazuje pozycję palców zaangażowanych w gest dotknięcia.

gameProcessedEvent: boolean

Wskazuje, czy silnik gry obserwował wewnętrznie ten wejściowy sygnał i działał na nim.Ogólnie odnosi się to do przetwarzania interfejsu użytkownika, więc jeśli przycisk został dotknięty lub kliknięty z tego wpisu, gameProcessedEvent byłby true.To samo dotyczy wydarzeń wejściowych połączonych za pomocą ContextActionService .


TouchTapInWorld

Wydarzenie TouchTapInWorld wystrzeliwuje się, gdy użytkownik dotknie/dotknie palcem ekranu na urządzeniu TouchEnabled.Wysyłany jest, gdy użytkownik kliknie w świat gry.

Wydarzenie to można wykorzystać do określenia, kiedy użytkownik dotknie ekranu i nie dotknie elementu GuiObject.Jeśli użytkownik naciśnie element GUI, UserInputService.TouchTap uruchomi zamiast TouchTapInWorld.

Aby sprawdzić, czy urządzenie użytkownika jest włączone do dotyku i czy zdarzenia dotykowe zostaną uruchomione, zobacz UserInputService.TouchEnabled .

To wydarzenie uruchamia się tylko wtedy, gdy okno klienta Roblox jest w focusie. Na przykład wejścia nie zostaną zarejestrowane, gdy okno zostanie zmniejszone.

Ponieważ strzela tylko lokalnie, może być używany tylko w LocalScript.

Zobacz także:

Parametry

position: Vector2

A Vector2 wskazujący pozycję dotknięcia.

processedByUI: boolean

Czy użytkownik kliknął element interfejsu graficznego.


WindowFocusReleased

Wydarzenie UserInputService WindowFocusReleased występuje, gdy okno klienta Roblox traci focus - zwykle gdy klient Roblox jest zmniejszony przez użytkownika

Na przykład kod poniżej drukuje "Skupienie okna uwolnione" za każdym razem, gdy klient Roblox traci skupienie.


local UserInputService = game:GetService("UserInputService")
UserInputService.WindowFocusReleased:Connect(function()
print("Window focus released")
end)

To wydarzenie można używać wraz z UserInputService.WindowFocused, aby śledzić, czy klient Roblox jest aktywnie skoncentrowany na ekranie użytkownika.

Ponieważ strzela tylko lokalnie, może być używany tylko w LocalScript.


WindowFocused

Wydarzenie skupione na oknie wystrzeliwuje się, gdy okno klienta Roblox uzyska focus - zwykle gdy klient Roblox jest maksymalizowany/aktywnie otwarty na ekranie użytkownika.

Na przykład kod poniżej drukuje "Skupiono okno" za każdym razem, gdy klient Roblox zyskuje skupienie.


local UserInputService = game:GetService("UserInputService")
UserInputService.WindowFocused:Connect(function()
print("Window focused")
end)

To wydarzenie można używać wraz z UserInputService.WindowFocusReleased, aby śledzić, czy klient Roblox jest aktywnie skoncentrowany na ekranie użytkownika.

Ponieważ to wydarzenie wystrzeliwuje się tylko lokalnie, można go używać tylko w LocalScript.