Input pad permainan

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

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 then
print("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) then
print("Gamepad1 is connected")
elseif UserInputService:GetGamepadConnected(Enum.UserInputType.Gamepad2) then
print("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 do
print(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:

InputKasus penggunaan umum
ButtonAMenerima prompt pemain atau pilihan GUI. Alternatifnya digunakan untuk tindakan utama seperti melompat.
ButtonBMembatalkan perintah pemain atau pilihan GUI. Alternatifnya digunakan untuk tindakan sekunder seperti menghindar, berguling, atau berlari.
Thumbstick1Umumnya terkait dengan gerakan karakter.
Thumbstick2Umumnya terkait dengan gerakan kamera.
ButtonL2 , ButtonR2Umumnya digunakan untuk tindakan utama, seperti menembak.
ButtonL1 , ButtonR1 , ButtonX , ButtonYTindakan 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.Gamepad1
local 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.Gamepad1
local isVibrationSupported = HapticService:IsVibrationSupported(gamepad)
if isVibrationSupported then
local 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 LokasiDeskripsi
LargeMotor yang lebih besar, berguna untuk gemuruh umum.
SmallMotor yang lebih kecil, berguna untuk getaran yang lebih halus seperti ban tergelincir, kejutan listrik, dll.
LeftTriggerDi bawah trigger kiri.
RightTriggerDi bawah trigger kanan.
LeftHandDi sisi kiri dari kontroler.
RightHandDi 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.Gamepad1
local isVibrationSupported = HapticService:IsVibrationSupported(gamepad)
if isVibrationSupported then
local largeMotor = HapticService:IsMotorSupported(gamepad, Enum.VibrationMotor.Large)
if largeMotor then
HapticService:SetMotor(gamepad, Enum.VibrationMotor.Large, 0.5)
end
end

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.

Emulate Device Controllers button indicated in Test tab View of the generic controller in the Controller Emulator.

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.