Roblox akceptuje wejście z klatek USB, takich jak kontrolery Xbox i PlayStation.Ponieważ gamepady występują w różnych odmianach, musisz przestrzegać dodatkowego ustawienia, aby zweryfikować, czy wejścia gamepada gracza są użyteczne w Twoim doświadczeniu.
Aby skonfigurować wejścia na gamepad, możesz użyć ContextActionService lub UserInputService , aby wykryć podłączone gamepady dla urządzeniegracza , zweryfikować wspierane wejścia , które są kompatybilne z Roblox, otrzymać wejście i więcej.
Podczas wiązania wejść z gamepada zobacz zwykłe schematy kontroli, aby stworzyć spójne doświadczenie z gamepadem dla graczy.Po ustawiaćwejść możesz ulepszyć doświadczenie gracza, dodając zwrotną informację haptyczną na wspieranych kontrolerach.
Wykryj gamepady
Możesz wykryć, czy urządzenie gracza ma obecnie aktywny gamepad za pomocą właściwości UserInputService.GamepadEnabled.
Wykrywanie gamepada
local UserInputService = game:GetService("UserInputService")if UserInputService.GamepadEnabled thenprint("Player has gamepad enabled...")end
Możesz sprawdzić połączone gamepady za pomocą wydarzeń UserInputService.GamepadConnected i UserInputService.GamepadDisconnected.Te wydarzenia występują, gdy urządzenie jest połączone lub odłączone odpowiednio, a oba wydarzenia przekazują Enum.UserInputType do połączonej funkcji wskazującą, który gamepad spowodował wydarzenie.W większości przypadków połączony gamepad jest Gamepad1 .
Sprawdzanie połączenia i odłączanie
local UserInputService = game:GetService("UserInputService")
UserInputService.GamepadConnected:Connect(function(gamepad)
print("User has connected controller: " .. tostring(gamepad))
end)
UserInputService.GamepadDisconnected:Connect(function(gamepad)
print("User has disconnected controller: " .. tostring(gamepad))
end)
Możesz również sprawdzić, czy określony kontroler jest połączony za pomocą metody UserInputService:GetGamepadConnected().Wymaga to Enum.UserInputType jako argumentu i akceptuje tylko wartości Gamepad1 poprzez Gamepad8.
Wyszukiwanie określonego połączenia gamepada
local UserInputService = game:GetService("UserInputService")if UserInputService:GetGamepadConnected(Enum.UserInputType.Gamepad1) thenprint("Gamepad1 is connected")elseif UserInputService:GetGamepadConnected(Enum.UserInputType.Gamepad2) thenprint("Gamepad2 is connected")end
Zweryfikuj wspierane wejścia
Ponieważ gamepady mogą mieć różne zestawy wejść, powinieneś sprawdzić, jakie wejścia są wspierane za pomocą UserInputService:GetSupportedGamepadKeyCodes() .Ta metoda przyjmuje Enum.UserInputType jako argument i zwraca tabelę z listą wszystkich dostępnych wejść dla określonego kontrolera.
Weryfikacja wspieranych wejść
local UserInputService = game:GetService("UserInputService")local availableInputs = UserInputService:GetSupportedGamepadKeyCodes(Enum.UserInputType.Gamepad2)print("This controller supports the following controls:")for _, control in availableInputs doprint(control)end
Otrzymuj wejście
ContextActionService jest przydatny do wiązania kontroli zarówno z gamepadami, jak i innymi źródłami wejściowymi, takimi jak mysz i klawiatura lub dotyk mobilny przyciski, lub do wiązania wielu funkcji z jednym wejściem przycisku na każdym urządzenie.Na przykład następujący przykład kodu wiąże akcję OpenSpellBook z przyciskiem na gamepadzie ButtonR2 i klawiszem B na klawiaturze.
Wiązanie akcji ContextActionService
local ContextActionService = game:GetService("ContextActionService")
local function openSpellBook(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
-- Otwórz książkę zaklęć
end
end
ContextActionService:BindAction("OpenSpellBook", openSpellBook, false, Enum.KeyCode.ButtonR2, Enum.KeyCode.B)
Alternatywnie możesz użyć UserInputService , aby wiązać kontrolki bezpośrednio z gamepadem.Podczas wykrywania wydarzeń z pada gry za pośrednictwem tej usługi użyj wydarzenia InputBegan, aby wykryć, kiedy przycisk został najpierw naciśnięty, oraz InputEnded, aby wykryć, kiedy przycisk zostanie uwolniony.W funkcji obsługi właściwość InputObject.UserInputType wskazuje, który gamepad wystrzelił wydarzenie, a InputObject.KeyCode wskazuje konkretny przycisk lub pręt, który go wystrzelił.
Wykrywanie naciśnięcia przycisku UserInputService
local UserInputService = game:GetService("UserInputService")
UserInputService.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.Gamepad1 then
if input.KeyCode == Enum.KeyCode.ButtonA then
print("Button A pressed on Gamepad1")
end
end
end)
Stan kontrolera
Możesz wykryć obecny stan wszystkich przycisków i patyków na gamepadzie za pomocą metody UserInputService:GetGamepadState().Jest to przydatne, jeśli musisz sprawdzić obecne wpisy na gamepadzie, gdy wystąpi wyraźne wydarzenie w twoim doświadczeniu, takie jak sprawdzenie, czy określone przyciski są naciskane, gdy postać dotyka obiektu.
Sprawdzanie stanu wejść gamepada
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local leftFoot = character:WaitForChild("LeftFoot")
-- Kiedy lewa noga wchodzi w kontakt z czymś, sprawdź stan wejścia gamepada
leftFoot.Touched:Connect(function(hit)
local state = UserInputService:GetGamepadState(Enum.UserInputType.Gamepad1)
for _, input in state do
-- Jeśli ButtonR2 jest obecnie trzymany, wydrukuj wiadomość
if input.KeyCode == Enum.KeyCode.ButtonR2 and input.UserInputState == Enum.UserInputState.Begin then
print("Character's left foot touched something while holding right trigger")
end
end
end)
Wyzwól ciśnienie
Możesz wykryć, ile presji jest wywierane na spusty gamepada, sprawdzając wartość Position.Z wejściowego spustu.
Testowanie ciśnienia uruchamiania
local UserInputService = game:GetService("UserInputService")
UserInputService.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.Gamepad1 then
if input.KeyCode == Enum.KeyCode.ButtonL2 then
print("Pressure on left trigger has changed:", input.Position.Z)
elseif input.KeyCode == Enum.KeyCode.ButtonR2 then
print("Pressure on right trigger has changed:", input.Position.Z)
end
end
end)
Wspólne schematy kontroli
Gamepady występują w różnych kształtach i rozmiarach.Podobnie jak w przypadku każdej metody wpisu gracza, najlepiej jest stworzyć pewną spójność między różnymi grami i doświadczeniami.

Następujące są powszechnymi wiązaniami wejściowymi, które pomogą graczom natychmiast poczuć się znajomo i komfortowo z elementy sterującegamepada:
Wejście | Pospolite przypadki użycia |
---|---|
ButtonA | Akceptuje wskazówki gracza lub wybory interfejsu graficznego. Alternatywnie używany do podstawowych działań, takich jak skakanie. |
ButtonB | Anuluje polecenia gracza lub wybory interfejsu użytkownika. Alternatywnie używany do działań drugorzędnych, takich jak unikanie, toczenie lub sprint. |
Thumbstick1 | Zazwyczaj związany z ruchem postaci. |
Thumbstick2 | Zazwyczaj związany z ruchem kamery. |
ButtonL2 , ButtonR2 | Zazwyczaj używany do podstawowych działań, takich jak strzelanie. |
ButtonL1 , ButtonR1 , ButtonX , ButtonY | Działania drugorzędne, takie jak ponowne ładowanie, ukierunkowanie lub dostęp do zapasu lub mapy minimalnej. |
Opinia opinie
Wiele kontrolerów gamepad ma silniki zbudowane w celu zapewnienia zwrotnej opiniehaptycznej.Dodawanie drgań i wibracji może znacznie poprawić doświadczenie gracza i zapewnić subtelne zwroty informacji poza wizualizacją lub dźwiękiem.Możesz użyć HapticService do weryfikacji wsparcia wibracji przed włączeniem silników.
Wsparcie wibracji
Nie wszystkie kontrolery mają silniki, więc ważne jest sprawdzenie wsparcia przed próbą użycia silników haptycznych.Aby sprawdzić, czy dany kontroler ma wsparcie wibracji, wezwij HapticService:IsVibrationSupported().
Sprawdź wsparcie wibracji
local HapticService = game:GetService("HapticService")local gamepad = Enum.UserInputType.Gamepad1local isVibrationSupported = HapticService:IsVibrationSupported(gamepad)
Niektóre kontrolery mają wiele silników dla różnych skal wibracji.Po sprawdzeniu, czy gamepad wspiera wibracje, powinieneś również sprawdzić, czy wspiera silniki, które zamierzasz używać za pośrednictwem HapticService:IsMotorSupported().
Sprawdź wspierane silniki
local HapticService = game:GetService("HapticService")local gamepad = Enum.UserInputType.Gamepad1local isVibrationSupported = HapticService:IsVibrationSupported(gamepad)if isVibrationSupported thenlocal largeMotor = HapticService:IsMotorSupported(gamepad, Enum.VibrationMotor.Large)local smallMotor = HapticService:IsMotorSupported(gamepad, Enum.VibrationMotor.Small)local leftTriggerMotor = HapticService:IsMotorSupported(gamepad, Enum.VibrationMotor.LeftTrigger)local rightTriggerMotor = HapticService:IsMotorSupported(gamepad, Enum.VibrationMotor.RightTrigger)local leftHandMotor = HapticService:IsMotorSupported(gamepad, Enum.VibrationMotor.LeftHand)local rightHandMotor = HapticService:IsMotorSupported(gamepad, Enum.VibrationMotor.RightHand)end
Rozmiar lub lokalizacja | Opis |
---|---|
Large | Większy silnik, przydatny do ogólnego hałasu. |
Small | Mniejszy silnik, przydatny do bardziej subtelnych drgań, takich jak przesuwanie opon, szok elektryczny itp. |
LeftTrigger | Poniżej lewego spustu. |
RightTrigger | Poniżej prawego uruchomienia. |
LeftHand | Na lewej stronie kontrolera. |
RightHand | Na prawej stronie kontrolera. |
Aktywuj silniki
Po potwierdzeniu, że gamepad gracza wspiera wibrację, możesz włączyć określony silnik za pomocą HapticService:SetMotor() .Ta metoda bierze gamepad i amplitudę wibracji jako argumenty.Amplituda może wynosić dowolną wartość pomiędzy 0 a 1.
Aktywacja silnika
local HapticService = game:GetService("HapticService")local gamepad = Enum.UserInputType.Gamepad1local isVibrationSupported = HapticService:IsVibrationSupported(gamepad)if isVibrationSupported thenlocal largeMotor = HapticService:IsMotorSupported(gamepad, Enum.VibrationMotor.Large)if largeMotor thenHapticService:SetMotor(gamepad, Enum.VibrationMotor.Large, 0.5)endend
Emulacja kontrolera
Emulator kontrolera pozwala dokładnie emulować wejście z gamepada bezpośrednio w Studio.Domyślnym kontrolerem jest ogólny gamepad, ale możesz wybrać alternatywy dla urządzeń PlayStation, Xbox i Quest z menu wyboru po lewej stronie górnej.


Podczas testowania gry możesz kontrolować doświadczenie za pomocą wirtualnego kontrolera za pomocą myszy.
Możesz także kliknąć Edytuj mapy w prawym górnym rogu, aby zobaczyć i edytować mapy kluczy dla wirtualnego kontrolera, na przykład E do ButtonL2 lub 9 do ButtonA.Te mapy są zapisywane tak jak inne ustawienia Studio (na kontrolerze, na użytkowniku, na komputerze) i są przetłumaczone na wydarzenia na gamepadzie zarówno w oknie emulatora, jak i w widoku 3D.