UserInputService
*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.
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
Opisuje, czy urządzenie użytkownika ma akcelerometr.
Opisuje, czy urządzenie używane przez użytkownika ma dostępny gamepad.
Opisuje, czy urządzenie użytkownika ma akcelerometr.
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.
Skaluje wyjście delta (zmiana) użytkownika Mouse.
Opisuje, czy urządzenie użytkownika ma dostępną mysz.
ID treści obrazu używanego jako ikona myszy użytkownika.
Określa, czy ikonka Mouse jest widoczna.
Określa pozycję klawiatury na ekranie.
Określa rozmiar klawiatury na ekranie.
Opisuje, czy klawiatura na ekranie jest obecnie widoczna na ekranie użytkownika.
Opisuje, czy aktualne urządzenie użytkownika ma dostępną powierzchnię dotykową.
Wskazuje, czy użytkownik korzysta z goglek wirtualnej rzeczywistości.
Metody
Zwraca, czy podany gamepad Enum.UserInputType wspiera przycisk odpowiadający danemu Enum.KeyCode.
Zwraca tablicę Enum.UserInputType padeł gry obecnie podłączonych.
Zwraca InputObject, który opisuje obecną akcelerację urządzenia.
Zwraca InputObject opisujący obecny wektor grawitacji urządzenia.
Zwraca InputObject i CFrame, opisując aktualny wektor rotacji urządzenia.
Zwraca obecnie TextBox klient jest obecnie skupiony.
Zwraca, czy gamepad z danym Enum.UserInputType "gamepadNum" jest podłączony.
Zwraca array z InputObjects dla wszystkich dostępnych wejść na danym gamepadzie, reprezentujący ostatni stan wejścia każdego wejścia.
Zwraca obraz dla żądanego Enum.KeyCode .
Zwraca tablicę InputObjects powiązanych z keys obecnie naciskanych.
Zwraca Enum.UserInputType powiązane z najnowszym wpisem użytkownika.
Zwraca tablicę InputObjects odpowiadającą przyciskom myszy, które są obecnie przytrzymywane.
Zwraca zmianę, w pikselach, pozycję gracza Mouse w ostatnim renderowanym ramie. Funkcjonuje tylko wtedy, gdy mysz jest zablokowana.
Powraca obecna lokalizacja ekranu gracza względem lewego górnego rogu ekranu. Mouse
Zwraca tablicę gamepads połączonych i włączonych do nawigacji GUI w kolejności malejącego priorytetu.
Zwraca ciąg reprezentujący klucz, który użytkownik powinien nacisnąć, aby wprowadzić dany Enum.KeyCode.
Zwraca tablicę KeyCodes, którą wspiera gamepad powiązany z danym Enum.UserInputType .
Określa, czy dany przycisk jest naciśnięty na określonym gamepadzie.
Zwraca, czy podany key jest obecnie przytrzymywany.
Zwraca, czy podany mouse button jest obecnie przytrzymywany.
Wyświetla prawdę, jeśli określony gamepad Enum.UserInputType pozwala kontrolować nawigację GuiObjects.
Odśrodkowuje CFrame słuchawki VR do obecnego kierunku noszenia słuchawki przez użytkownika.
Ustawia, czy określone Gamepad może przenieść nawigator GuiObject czy nie.
Zdarzenia
Strzelany, gdy użytkownik przenosi urządzenie, które ma akcelerometr. Używany do śledzenia ruchu urządzenia w świecie rzeczywistym w grze Roblox.
Wystrzeliwany, gdy siła grawitacji zmienia się na urządzeniu, które ma włączony akcelerometr - na przykład na urządzeniu mobilnym.
Wystrzelony, gdy użytkownik obraca urządzenie, które ma akcelerometr.
Wystrzeliwuje, gdy gamepad jest podłączony do klienta. Przekazuje "gamepadNum" z gamepada, który był podłączony.
Wypala się, gdy gamepad jest odłączony od klienta. Przekazuje Enum.UserInputType z gamepada, który został odłączony.
Wystrzeliwany, gdy użytkownik zaczyna interakcję za pomocą urządzenia interfejsu człowiek-komputer, takiego jak mysz lub gamepad.
Wystrzeliwany, gdy użytkownik zmienia sposób interakcji za pomocą urządzenia interfejsu człowiek-komputer.
Wypala się, gdy użytkownik przestaje interakcjonować za pomocą urządzenia interfejsu człowiek-komputer.
Wystrzeliwuje za każdym razem, gdy klient wysyła żądanie, aby jego postać skoczyła.
Wystrzeliwuje, gdy zmieniony zostanie Enum.UserInputType klienta.
- PointerAction(wheel : number,pan : Vector2,pinch : number,gameProcessedEvent : boolean):RBXScriptSignal
Wystrzeliwuje, gdy użytkownik wykonuje określoną akcję wskazania (koło, przeciągnięcie, przesuwanie).
Wystrzeliwany, gdy klient traci koncentrację na TextBox.
Wystrzeliwany, gdy klient skupia się na TextBox.
- TouchDrag(dragDirection : Enum.SwipeDirection,numberOfTouches : number,gameProcessedEvent : boolean):RBXScriptSignal
Wystrzeliwany, gdy użytkownik uwalnia palec z ekranu na urządzeniu z włączonym dotykiem - takim jak ekran urządzenia mobilnego.
- TouchLongPress(touchPositions : Array,state : Enum.UserInputState,gameProcessedEvent : boolean):RBXScriptSignal
Wystrzeliwany, gdy użytkownik trzyma co najmniej jeden palec przez krótki czas na tej samej pozycji ekranu na urządzeniu z włączonym dotykiem - takim jak ekran urządzenia mobilnego.
Wystrzeliwuje, gdy użytkownik przesuwa palec na urządzeniu TouchEnabled takim jak tablet lub smartfon.
- TouchPan(touchPositions : Array,totalTranslation : Vector2,velocity : Vector2,state : Enum.UserInputState,gameProcessedEvent : boolean):RBXScriptSignal
Wystrzeliwany, gdy użytkownik przeciągnie co najmniej jeden palec na urządzeniu TouchEnabled - takim jak ekran urządzenia mobilnego.
- TouchPinch(touchPositions : Array,scale : number,velocity : number,state : Enum.UserInputState,gameProcessedEvent : boolean):RBXScriptSignal
Wystrzeliwany, gdy użytkownik przyciska palce na urządzeniu TouchEnabled - takim jak ekran urządzenia mobilnego.
- TouchRotate(touchPositions : Array,rotation : number,velocity : number,state : Enum.UserInputState,gameProcessedEvent : boolean):RBXScriptSignal
Wypala się, gdy użytkownik obraca dwa palce na urządzeniu TouchEnabled - takim jak ekran urządzenia mobilnego.
Wystrzeliwany, gdy użytkownik położy palec na urządzeniu z włączonym dotykiem - takim jak ekran Apple iPad lub iPhone lub telefon Google Android.
- TouchSwipe(swipeDirection : Enum.SwipeDirection,numberOfTouches : number,gameProcessedEvent : boolean):RBXScriptSignal
Ogień na urządzeniu TouchEnabled w momencie, gdy użytkownik umieszcza palce na ekranie, przesuwa je po ekranie i odrywa je z pewną prędkością ruchu.
Wystrzeliwany, gdy użytkownik dotknie palcem urządzenia TouchEnabled - takiego jak ekran urządzenia mobilnego.
Wypala się, gdy użytkownik dotknie świata gry na urządzeniu TouchEnabled - takim jak ekran urządzenia mobilnego.
Wystrzeliwuje, gdy okno klienta Roblox traci skupienie na ekranie użytkownika.
Wybucha, gdy okno klienta Roblox zyskuje uwagę na ekranie użytkownika.
Właściwości
AccelerometerEnabled
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.AccelerometerEnabledif accelerometerEnabled thenprint("Accelerometer enabled!")elseprint("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.
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
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
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.GyroscopeEnabledif gyroIsEnabled thenprint("Gyroscope is enabled!")elseprint("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
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
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:
- Enum.MouseBehavior.Default — Mysz porusza się swobodnie po ekranie użytkownika.
- Enum.MouseBehavior.LockCenter — Mysz jest zablokowana i nie może się poruszać z centrum ekranu użytkownika.
- Enum.MouseBehavior.LockCurrentPosition — Mysz jest zablokowana i nie może się poruszać z jej obecnej pozycji na ekranie użytkownika w momencie blokowania.
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.
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
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.
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
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 thenprint("The user's device has an available mouse!")elseprint("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.
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
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.
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
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.
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
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
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
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
TouchEnabled
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 thenprint("The user's device has a touchscreen!")elseprint("The user's device does not have a touchscreen!")end
Zobacz także:
VREnabled
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.VREnabledif isUsingVR thenprint("User is using a VR headset!")elseprint("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.
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
The Enum.UserInputType z gamepada.
Przycisk Enum.KeyCode z pytania.
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.
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.
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:
- Właściwość delta opisuje ilość rotacji, która miała miejsce po raz ostatni
- 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.
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
The Enum.UserInputType z gamepada w kwestii.
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
The Enum.UserInputType odpowiadający gamepadowi w kwestii.
Zwroty
Matryca InputObjects reprezentująca obecny stan wszystkich dostępnych wejść dla danego gamepada.
GetImageForKeyCode
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
The Enum.KeyCode dla którego należy pobrać powiązany obraz.
Zwroty
ID zwróconego obrazu zasobu.
Przykłady kodu
Ta API zwraca żądaną obraz dla podanego Enum.KeyCode.
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.
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).
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.
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
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:
- UserInputService:SetNavigationGamepad() , aby włączyć lub wyłączyć gamepad do nawigacji GUI
- UserInputService:IsNavigationGamepad() , aby zweryfikować, czy gamepad jest włączony do nawigacji GUI
- UserInputService:GetConnectedGamepads() , aby zwrócić wszystkie pady gry połączone niezależnie od kontroli nawigacyjnej GUI
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.Parentlocal mapKey = Enum.KeyCode.MtextLabel.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.Parentlocal key = Enum.KeyCode.ButtonAlocal mappings = {ButtonA = "rbxasset://BUTTON_A_ASSET", -- Replace with the desired ButtonA assetButtonCross = "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
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
The Enum.UserInputType z gamepada.
Zwroty
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.
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.ButtonAlocal gamepad = Enum.UserInputType.Gamepad1local 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:
- UserInputService:IsKeyDown() - Podobna metoda z innym użyciem: Aby sprawdzić, czy naciśnięto dany key na keyboard.
Parametry
The Enum.UserInputType z podanego gamepada.
The Enum.KeyCode z określonym przyciskiem.
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:
- Enum.UserInputType.IsGamepadButtonDown - Podobne wydarzenie z innym użyciem: Aby sprawdzić, czy naciśnięto dany button na gamepad.
Parametry
The Enum.KeyCode klucza.
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
The Enum.UserInputType z przycisku myszy.
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) thenprint("Gamepad is a navigation gamepad!")elseprint("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
The Enum.UserInputType z określonego gamepada.
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
The Enum.UserInputType z określonego gamepada.
Czy określony gamepad może przesuwać nawigator GUI.
Zwroty
Przykłady kodu
Ten przykład ustawia Gamepad1 jako gamepad nawigacyjny, przekazując Enum.UserInputType.Gamepad1 i true jako argumenty.
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
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.
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
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.
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
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.
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.
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
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
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.
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.
-- 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.
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.
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.
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
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.
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
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
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
TouchDrag
Parametry
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.
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
The Enum.UserInputState of the gesture.
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.
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
Matryca Vector2 obiektów, wskazująca pozycje dotyków (np. palców) zaangażowanych w gest.
Rozmiar gestu patelni od początku do końca (w pikselach).
Prędkość gestu panoramy (w pikselach) na sekundę.
The Enum.UserInputState of the gesture.
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
Matryca Vector2s, wskazująca pozycję ekranu, w pikselach, palców zaangażowanych w gest przesuwania.
Wielkość skurczenia od początku do końca (w pikselach) podzielona przez pozycje skurczenia początkowego.
Prędkość gestu przesuwania (w pikselach) na sekundę.
The Enum.UserInputState of the gesture.
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
Liczba stopni, w jakich ruch się obrócił od początku ruchu.
Zmiana w obrocie (w stopniach) podzielona przez czas trwania zmiany (w sekundach).
The Enum.UserInputState of the gesture.
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.
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
An Enum.SwipeDirection, wskazujący kierunek, w którym użytkownik przesuwał.
Liczba dotknięć (np. palców) zaangażowanych w gest.
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
Zbiór Vector2 obiektów, który wskazuje pozycję palców zaangażowanych w gest dotknięcia.
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
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.