Roblox menerima input dari gamepad USB seperti Xbox dan kontroler PlayStation.Karena gamepad datang dalam berbagai varietas, Anda perlu mengikuti pengaturan tambahan untuk memverifikasi bahwa input gamepad pemain dapat digunakan dalam pengalaman Anda.
Untuk mengatur input gamepad, Anda dapat menggunakan ContextActionService atau UserInputService untuk mendeteksi gamepad terhubung untuk perangkat pemain, memverifikasi input yang didukung yang kompatibel dengan Roblox, menerima input , dan banyak lagi.
Saat mengikat input gamepad, lihat skema kontrol umum untuk membuat pengalaman gamepad konsisten bagi pemain.Setelah input atur, Anda dapat meningkatkan pengalaman pemain dengan menyertakan umpan balas haptik pada kontroler yang didukung.
Mendeteksi gamepad
Anda dapat mendeteksi apakah perangkat pemain saat ini memiliki gamepad aktif menggunakan properti UserInputService.GamepadEnabled.
Mendeteksi Gamepad
local UserInputService = game:GetService("UserInputService")if UserInputService.GamepadEnabled thenprint("Player has gamepad enabled...")end
Anda dapat memeriksa gamepad terhubung melalui UserInputService.GamepadConnected dan UserInputService.GamepadDisconnected peristiwa.Peristiwa ini terjadi ketika perangkat terhubung atau terputus secara bergantian, dan kedua peristiwa melewati Enum.UserInputType ke fungsi terhubung yang menunjukkan gamepad mana yang menyebabkan peristiwa tersebut.Dalam kebanyakan kasus, gamepad terhubung adalah Gamepad1 .
Memeriksa Koneksi dan Pemutusan
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)
Anda juga dapat menanyakan apakah kontroler tertentu terhubung menggunakan metode UserInputService:GetGamepadConnected().Ini mengambil Enum.UserInputType sebagai argumen dan hanya menerima nilai Gamepad1 melalui Gamepad8 .
Koneksi Gamepad Khusus Pertanyaan
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
Verifikasi input yang didukung
Karena gamepad dapat memiliki berbagai set input, Anda harus memeriksa input mana yang didukung dengan UserInputService:GetSupportedGamepadKeyCodes() .Metode ini mengambil Enum.UserInputType sebagai argumen dan mem返ikan tabel dengan daftar semua input yang tersedia untuk kontroler yang ditentukan.
Memverifikasi Input yang Didukung
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
Menerima input
ContextActionService berguna untuk mengikat kontrol ke kedua gamepad dan sumber input lain seperti mouse dan keyboard input atau tombol touchscreen mobile , atau untuk mengikat banyak fungsi ke satu input tombol pada perangkat apa pun.Sebagai contoh, sampel kode berikut mengikat tindakan OpenSpellBook ke tombol gamepad ButtonR2 dan tombol keyboard B .
Bind Aksi Layanan Konteks
local ContextActionService = game:GetService("ContextActionService")
local function openSpellBook(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
-- Buka buku mantra
end
end
ContextActionService:BindAction("OpenSpellBook", openSpellBook, false, Enum.KeyCode.ButtonR2, Enum.KeyCode.B)
Alternatifnya, Anda dapat menggunakan UserInputService untuk mengikat kontrol langsung dari gamepad.Saat mendeteksi acara gamepad melalui layanan ini, gunakan acara InputBegan untuk mendeteksi ketika tombol pertama kali ditekan dan InputEnded untuk mendeteksi ketika tombol dilepaskan.Dalam fungsi penanganan, properti InputObject.UserInputType menunjukkan gamepad mana yang menembakkan peristiwa dan InputObject.KeyCode menunjukkan tombol atau tongkat khusus yang menembakkannya.
Deteksi Tekan Tombol Layanan Masukan Pengguna
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)
Negara gamepad
Anda dapat mendeteksi status saat ini dari semua tombol dan tongkat di gamepad dengan metode UserInputService:GetGamepadState().Ini berguna jika Anda perlu memeriksa input gamepad saat ini saat terjadi peristiwa berbeda dalam pengalaman Anda, seperti memeriksa apakah tombol tertentu ditekan saat karakter menyentuh objek.
Memeriksa Kondisi Input Gamepad
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")
-- Ketika kaki kiri masuk kontak dengan sesuatu, periksa status input gamepad
leftFoot.Touched:Connect(function(hit)
local state = UserInputService:GetGamepadState(Enum.UserInputType.Gamepad1)
for _, input in state do
-- Jika TombolR2 saat ini dipegang, cetakkan pesan
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)
Aktifkan tekanan
Anda dapat mendeteksi berapa banyak tekanan yang ditempatkan pada trigger gamepad dengan memeriksa nilai Position.Z input trigger.
Menguji Tekanan Aktivasi Pengujian
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)
Skema kontrol umum
Gamepad datang dalam berbagai bentuk dan ukuran.Seperti dengan metode input pemain lainnya, yang terbaik adalah membuat beberapa konsistensi di berbagai permainan dan pengalaman.

Berikut adalah ikatan input umum yang akan membantu pemain segera merasa akrab dan nyaman dengan kendaligamepad:
Input | Kasus penggunaan umum |
---|---|
ButtonA | Menerima prompt pemain atau pilihan GUI. Alternatifnya digunakan untuk tindakan utama seperti melompat. |
ButtonB | Membatalkan perintah pemain atau pilihan GUI. Alternatifnya digunakan untuk tindakan sekunder seperti menghindar, berguling, atau berlari. |
Thumbstick1 | Umumnya terkait dengan gerakan karakter. |
Thumbstick2 | Umumnya terkait dengan gerakan kamera. |
ButtonL2 , ButtonR2 | Umumnya digunakan untuk tindakan utama, seperti menembak. |
ButtonL1 , ButtonR1 , ButtonX , ButtonY | Tindakan sekunder seperti memuat ulang, menargetkan, atau mengakses inventaris atau minimap. |
Umpan balik masukan
Banyak kontroler gamepad memiliki motor yang dibangun untuk memberikan umpan balas masukan.Menambahkan gemuruh dan getaran dapat sangat meningkatkan pengalaman pemain dan memberikan umpan balik halus di luar visual atau audio.Anda dapat menggunakan HapticService untuk memverifikasi dukungan getaran sebelum menyalakan motor.
Dukungan getaran
Tidak semua kontroler memiliki motor jadi penting untuk memeriksa dukungan sebelum mencoba menggunakan motor haptik.Untuk menanyakan apakah kontrolir tertentu memiliki dukungan getaran, hubungi HapticService:IsVibrationSupported() .
Periksa Dukungan Vibrasi
local HapticService = game:GetService("HapticService")local gamepad = Enum.UserInputType.Gamepad1local isVibrationSupported = HapticService:IsVibrationSupported(gamepad)
Beberapa kontroler memiliki beberapa motor untuk berbagai skala getaran.Setelah Anda memeriksa apakah gamepad mendukung getaran, Anda juga harus memeriksa apakah itu mendukung motor yang ingin Anda gunakan melalui HapticService:IsMotorSupported() .
Periksa Motor yang Didukung
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
Ukuran atau Lokasi | Deskripsi |
---|---|
Large | Motor yang lebih besar, berguna untuk gemuruh umum. |
Small | Motor yang lebih kecil, berguna untuk getaran yang lebih halus seperti ban tergelincir, kejutan listrik, dll. |
LeftTrigger | Di bawah trigger kiri. |
RightTrigger | Di bawah trigger kanan. |
LeftHand | Di sisi kiri dari kontroler. |
RightHand | Di sisi kanan kontroler. |
Aktifkan motor
Setelah Anda memastikan bahwa gamepad pemain mendukung vibrasi, Anda dapat menyalakan motor khusus dengan HapticService:SetMotor() .Metode ini mengambil gamepad dan amplitud vibrasi sebagai argumen.Amplitud bisa menjadi nilai apa pun antara 0 dan 1.
Mengaktifkan Motor
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
Emulasi kontroler
The Emulator Kontroler memungkinkan Anda untuk secara akurat meniru input gamepad langsung di StudioKontroler default adalah gamepad umum, tetapi Anda dapat memilih alternatif untuk perangkat PlayStation, Xbox, dan Quest dari menu pemilih kiri atas.


Selama pengujian permainan, Anda dapat mengontrol pengalaman dengan kontroler virtual menggunakan mouse Anda.
Anda juga dapat mengklik Edit mappings di sudut kanan atas untuk melihat dan mengedit peta kunci untuk kontrol virtual, misalnya E untuk ButtonL2 atau 9 untuk ButtonA .Peta ini disimpan seperti pengaturan Studio lainnya (per kontroler, per pengguna, per komputer) dan diterjemahkan ke acara gamepad di jendela emulator dan tampilan 3D.