Roblox รองรับการใส่ข้อมูลจากเกมแพด USB เช่น Xbox และคอนโทรลเลอร์ของ PlayStationเนื่องจากเกมแพดมาในรูปแบบที่แตกต่างกันคุณจึงต้องทำตามการตั้งค่าเพิ่มเติมเพื่อตรวจสอบว่าการใช้งานเกมแพดของผู้เล่นสามารถใช้งานได้ในประสบการณ์ของคุณ
เพื่อตั้งค่าการใช้งานเกมแพด คุณสามารถใช้ หรือ เพื่อ ตรวจจับเกมแพดที่เชื่อมต่อ สำหรับอุปกรณ์ของผู้เล่น, ตรวจสอบการรองรับอินพุตที่สอดคล้องกับ Roblox, รับอินพุต และอื่นๆ
เมื่อผูกการใช้งานเกมแพด ดู แผนการควบคุมทั่วไป เพื่อสร้างประสบการณ์เกมแพดที่สอดคล้องสำหรับผู้เล่นหลังจากการป้อนข้อมูลถูกตั้งค่าแล้ว คุณสามารถปรับปรุงประสบการณ์ของผู้เล่นโดยรวมโดยรวมการตอบสนองแบบสัมผัส 5 บนคอนโทรลเลอร์ที่สนับสนุน
ตรวจจับเกมแพด
คุณสามารถตรวจสอบได้ว่าอุปกรณ์ของผู้เล่นมีเกมแพดใช้งานอยู่ในปัจจุบันโดยใช้คุณสมบัติ UserInputService.GamepadEnabled
ตรวจจับเกมแพด
local UserInputService = game:GetService("UserInputService")if UserInputService.GamepadEnabled thenprint("Player has gamepad enabled...")end
คุณสามารถตรวจสอบ gamepad ที่เชื่อมต่อผ่านการเหตุการณ์ UserInputService.GamepadConnected และ UserInputService.GamepadDisconnectedเหตุการณ์เหล่านี้จะเกิดขึ้นเมื่ออุปกรณ์ถูกเชื่อมต่อหรือถูกตัดการเชื่อมต่อตามลําดับและทั้งสองเหตุการณ์ส่ง Enum.UserInputType ไปยังฟังก์ชันที่เชื่อมต่อซึ่งระบุว่าเกมแพดทําให้เกิดเหตุการณ์ในกรณีส่วนใหญ่ gamepad ที่เชื่อมต่อมี Gamepad1
ตรวจสอบการเชื่อมต่อและการตัดการเชื่อมต่อ
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)
คุณยังสามารถสอบถามว่าควบคุมเฉพาะมีการเชื่อมต่อโดยใช้วิธี UserInputService:GetGamepadConnected() หรือไม่นี้ใช้ Enum.UserInputType เป็นอาร์กิวเมนต์และยอมรับค่าของ Gamepad1 ผ่าน Gamepad8 เท่านั้น
การเชื่อมต่อเกมแพดเฉพาะคำถาม
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
ตรวจสอบอินพุตที่สนับสนุน
เนื่องจากเกมแพดสามารถมีชุดของอินพุตที่แตกต่างกันได้คุณควรตรวจสอบว่าอินพุตใดที่สนับสนุนด้วย UserInputService:GetSupportedGamepadKeyCodes()วิธีนี้ใช้ Enum.UserInputType เป็นอาร์กิวเมนต์และส่งคืนตารางที่มีรายการของอินพุตทั้งหมดที่มีอยู่สำหรับคอนโทรลเลอร์ที่ระบุ
ตรวจสอบการสนับสนุนอินพุตที่สนับสนุน
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
รับอินพุต
ContextActionService มีประโยชน์สำหรับการผูกควบคุมกับทั้ง gamepad และแหล่งการรับข้อมูลอื่นๆ เช่น เมาส์และแป้นพิมพ์ หรือ หน้าจอสัมผัสมือถือ หรือสำหรับผูกฟังก์ชันหลายอย่างไปยังปุ่มเดียวบนอุปกรณ์ใดก็ได้ตัวอย่างโค้ดต่อไปนี้จะผูกการดำเนินการ OpenSpellBook กับปุ่ม ButtonR2 ของเกมแพดและปุ่ม B ของแป้นพิมพ์
บริการการดำเนินการในบริบทผูกการกระทำ
local ContextActionService = game:GetService("ContextActionService")
local function openSpellBook(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
-- เปิดหนังสือคาถา
end
end
ContextActionService:BindAction("OpenSpellBook", openSpellBook, false, Enum.KeyCode.ButtonR2, Enum.KeyCode.B)
หรือคุณสามารถใช้ UserInputService เพื่อผูกควบคุมโดยตรงจากแป้ดเกมได้เมื่อตรวจจับเหตุการณ์เกมแพดผ่านบริการนี้ใช้เหตุการณ์ InputBegan เพื่อตรวจจับเมื่อปุ่มถูกกดเป็นครั้งแรกและ InputEnded เพื่อตรวจจับเมื่อปุ่มถูกปล่อยในฟังก์ชันการจัดการคุณสมบัติ InputObject.UserInputType จะระบุว่าเกมแพดรายงานเหตุการณ์และ InputObject.KeyCode จะระบุปุ่มหรือสติกที่ระเบิดมัน
การตรวจจับปุ่มกดของบริการอินพุตผู้ใช้
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)
สถานะของเกมแพด
คุณสามารถตรวจจับสถานะปัจจุบันของปุ่มและสติกทั้งหมดบนคอนโซลเกมด้วยวิธี UserInputService:GetGamepadState()นี่มีประโยชน์หากคุณต้องการตรวจสอบการใส่ข้อมูลเกมแพดปัจจุบันเมื่อเกิดเหตุการณ์ที่แตกต่างในประสบการณ์ของคุณ เช่น ตรวจสอบว่าปุ่มเฉพาะถูกกดเมื่อตัวละครสัมผัสวัตถุ
ตรวจสอบสถานะของอินพุตเกมแพด
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")
-- เมื่อเท้าซ้ายมาสัมผัสกับบางสิ่ง ตรวจสอบสถานะการเข้าระบบของเกมแพด
leftFoot.Touched:Connect(function(hit)
local state = UserInputService:GetGamepadState(Enum.UserInputType.Gamepad1)
for _, input in state do
-- หากปุ่ม R2 ถูกถืออยู่ในขณะนี้ พิมพ์ข้อความออก
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)
กระตุ้นความดัน
คุณสามารถตรวจสอบได้ว่ามีความดันเท่าใดที่ถูกวางไว้บนสวิตช์เกมแพดโดยตรวจสอบค่า Position.Z ของสวิตช์อินพุต
การทดสอบแรงดันการกระตุ้น
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)
แผนการควบคุมทั่วไป
เกมแพดมาในรูปแบบและขนาดที่หลากหลายเช่นเดียวกับวิธีการใส่ข้อมูลผู้เล่นใดๆ การสร้างความสอดคล้องบางอย่างในเกมและประสบการณ์ที่แตกต่างกันเป็นสิ่งที่ดีที่สุด

ต่อไปนี้เป็นการผูกอินพุตทั่วไปที่จะช่วยให้ผู้เล่นรู้สึกคุ้นเคยและสบายใจกับการควบคุมเกมแพดทันที:
การป้อน | กรณีการใช้งานทั่วไป |
---|---|
ButtonA | ยอมรับคําแนะนําของผู้เล่นหรือการเลือก GUI ใช้แทนสําหรับการดําเนินการหลักเช่นการกระโดด |
ButtonB | ยกเลิกคําแนะนําผู้เล่นหรือการเลือก GUI ใช้แทนสําหรับการดําเนินการรองเช่นการหลบหลีกการกลิ้งหรือวิ่ง |
Thumbstick1 | ส่วนใหญ่เกี่ยวข้องกับการเคลื่อนที่ของตัวละคร |
Thumbstick2 | ส่วนใหญ่เกี่ยวข้องกับการเคลื่อนไหวของกล้อง |
ButtonL2 , ButtonR2 | ใช้สำหรับการดำเนินการหลัก เช่น การยิง |
ButtonL1 , ButtonR1 , ButtonX , ButtonY | การดำเนินการรอง เช่น การรีโหลด การเล็ง หรือการเข้าถึงคลังสินค้าหรือแผนที่ |
ข้อเสนอแนะ
ผู้ควบคุมเกมแผ่นจำนวนมากมีมอเตอร์ที่สร้างขึ้นเพื่อให้ความเห็นและข้อเสนอแนะทางกายภาพการเพิ่มเสียงดังและการสั่นสะเทือนสามารถเพิ่มประสบการณ์ของผู้เล่นได้อย่างมากและให้ข้อเสนอแนะอย่างนุ่งนิ่งนอกเหนือจากภาพหรือเสียงคุณสามารถใช้ HapticService เพื่อ ตรวจสอบการสนับสนุนการสั่นสะเทือน ก่อน เปิดใช้งานมอเตอร์
การสนับสนุนแรงสะเทือน
ไม่ใช่ทุกคอนโทรลเลอร์มีมอเตอร์ดังนั้นจึงเป็นสิ่งสำคัญที่ต้องตรวจสอบการสนับสนุนก่อนที่จะพยายามใช้มอเตอร์แฮปติกเพื่อตรวจสอบว่าควบคุมที่กำหนดมีการสนับสนุนการสั่นสะเทือนหรือไม่ โทร HapticService:IsVibrationSupported()
ตรวจสอบการสนับสนุนแรงสะเทือน
local HapticService = game:GetService("HapticService")local gamepad = Enum.UserInputType.Gamepad1local isVibrationSupported = HapticService:IsVibrationSupported(gamepad)
บางคอนโทรลเลอร์มีมอเตอร์หลายตัวสำหรับหลายระดับของการสั่นสะเทือนเมื่อคุณตรวจสอบแล้วว่าเกมแพดสนับสนุนการสั่นสะเทือนแล้ว คุณควรตรวจสอบด้วยว่ามันสนับสนุนมอเตอร์ที่คุณตั้งใจจะใช้ผ่าน HapticService:IsMotorSupported() หรือไม่
ตรวจสอบมอเตอร์ที่สนับสนุน
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
ขนาดหรือตำแหน่ง | คําอธิบาย |
---|---|
Large | มอเตอร์ขนาดใหญ่ที่มีประโยชน์สำหรับการสะบัดแบบทั่วไป |
Small | มอเตอร์ขนาดเล็กที่มีประโยชน์สำหรับการสั่นสะเทือนที่ละเอียดอ่อนเช่นยางลื่นไถลการช็อตไฟฟ้าฯลฯ |
LeftTrigger | ใต้ตัวกระตุ้นด้านซ้าย |
RightTrigger | ใต้ตัวกระตุ้นด้านขวา |
LeftHand | ที่ด้านซ้ายของตัวควบคุม |
RightHand | ที่ด้านขวาของตัวควบคุม |
เปิดใช้มอเตอร์
เมื่อคุณยืนยันแล้วว่าเกมแพดของผู้เล่น สนับสนุนการสั่นสะเทือน คุณสามารถเปิดใช้งานมอเตอร์เฉพาะด้วย HapticService:SetMotor()วิธีนี้ใช้ gamepad และความถี่ของการสั่นสะเทือนเป็นอาร์กิวเมนต์ความถี่สามารถเป็นค่าใดก็ได้ระหว่าง 0 และ 1
เปิดใช้มอเตอร์
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
การจําลองควบคุม
ตัวจําลองควบคุม เอมูเลเตอร์เกมแพด ช่วยให้คุณสามารถจําลองการใส่เกมแพดได้อย่างแม่นยําโดยตรงใน Studioคอนโทรลเลอร์เริ่มต้นเป็นเกมแพดทั่วไป แต่คุณสามารถเลือกทางเลือกสำหรับ PlayStation, Xbox และอุปกรณ์เควสจากเมนูตัวเลือกด้านบนซ้าย


ในระหว่างการทดสอบการเล่น คุณสามารถควบคุมประสบการณ์ด้วยตัวควบคุมเสมือนโดยใช้เมาส์ของคุณ
คุณยังสามารถคลิก แก้ไขการจับคู่ ในมุมขวาบนเพื่อดูและแก้ไขการจับคู่คีย์สําหรับคอนโทรลเลอร์เสมือนได้ เช่น E ไปยัง ButtonL2 หรือ 9 ไปยัง ButtonAการจัดเก็บแผนที่เหล่านี้เป็นไปตามการตั้งค่าของ Studio อื่นๆ (ต่อตัวควบคุม ต่อผู้ใช้ ต่อคอมพิวเตอร์) และถูกแปลเป็นอีเวนต์ของเกมแพดในทั้งหน้าต่างจำลองและมุมมอง 3D