การใส่เกมแพด

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

Roblox รองรับการใส่ข้อมูลจากเกมแพด USB เช่น Xbox และคอนโทรลเลอร์ของ PlayStationเนื่องจากเกมแพดมาในรูปแบบที่แตกต่างกันคุณจึงต้องทำตามการตั้งค่าเพิ่มเติมเพื่อตรวจสอบว่าการใช้งานเกมแพดของผู้เล่นสามารถใช้งานได้ในประสบการณ์ของคุณ

เพื่อตั้งค่าการใช้งานเกมแพด คุณสามารถใช้ หรือ เพื่อ ตรวจจับเกมแพดที่เชื่อมต่อ สำหรับอุปกรณ์ของผู้เล่น, ตรวจสอบการรองรับอินพุตที่สอดคล้องกับ Roblox, รับอินพุต และอื่นๆ

เมื่อผูกการใช้งานเกมแพด ดู แผนการควบคุมทั่วไป เพื่อสร้างประสบการณ์เกมแพดที่สอดคล้องสำหรับผู้เล่นหลังจากการป้อนข้อมูลถูกตั้งค่าแล้ว คุณสามารถปรับปรุงประสบการณ์ของผู้เล่นโดยรวมโดยรวมการตอบสนองแบบสัมผัส 5 บนคอนโทรลเลอร์ที่สนับสนุน

ตรวจจับเกมแพด

คุณสามารถตรวจสอบได้ว่าอุปกรณ์ของผู้เล่นมีเกมแพดใช้งานอยู่ในปัจจุบันโดยใช้คุณสมบัติ UserInputService.GamepadEnabled

ตรวจจับเกมแพด

local UserInputService = game:GetService("UserInputService")
if UserInputService.GamepadEnabled then
print("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) then
print("Gamepad1 is connected")
elseif UserInputService:GetGamepadConnected(Enum.UserInputType.Gamepad2) then
print("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 do
print(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.Gamepad1
local isVibrationSupported = HapticService:IsVibrationSupported(gamepad)

บางคอนโทรลเลอร์มีมอเตอร์หลายตัวสำหรับหลายระดับของการสั่นสะเทือนเมื่อคุณตรวจสอบแล้วว่าเกมแพดสนับสนุนการสั่นสะเทือนแล้ว คุณควรตรวจสอบด้วยว่ามันสนับสนุนมอเตอร์ที่คุณตั้งใจจะใช้ผ่าน HapticService:IsMotorSupported() หรือไม่

ตรวจสอบมอเตอร์ที่สนับสนุน

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
ขนาดหรือตำแหน่งคําอธิบาย
Largeมอเตอร์ขนาดใหญ่ที่มีประโยชน์สำหรับการสะบัดแบบทั่วไป
Smallมอเตอร์ขนาดเล็กที่มีประโยชน์สำหรับการสั่นสะเทือนที่ละเอียดอ่อนเช่นยางลื่นไถลการช็อตไฟฟ้าฯลฯ
LeftTriggerใต้ตัวกระตุ้นด้านซ้าย
RightTriggerใต้ตัวกระตุ้นด้านขวา
LeftHandที่ด้านซ้ายของตัวควบคุม
RightHandที่ด้านขวาของตัวควบคุม

เปิดใช้มอเตอร์

เมื่อคุณยืนยันแล้วว่าเกมแพดของผู้เล่น สนับสนุนการสั่นสะเทือน คุณสามารถเปิดใช้งานมอเตอร์เฉพาะด้วย HapticService:SetMotor()วิธีนี้ใช้ gamepad และความถี่ของการสั่นสะเทือนเป็นอาร์กิวเมนต์ความถี่สามารถเป็นค่าใดก็ได้ระหว่าง 0 และ 1

เปิดใช้มอเตอร์

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

การจําลองควบคุม

ตัวจําลองควบคุม เอมูเลเตอร์เกมแพด ช่วยให้คุณสามารถจําลองการใส่เกมแพดได้อย่างแม่นยําโดยตรงใน Studioคอนโทรลเลอร์เริ่มต้นเป็นเกมแพดทั่วไป แต่คุณสามารถเลือกทางเลือกสำหรับ PlayStation, Xbox และอุปกรณ์เควสจากเมนูตัวเลือกด้านบนซ้าย

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

ในระหว่างการทดสอบการเล่น คุณสามารถควบคุมประสบการณ์ด้วยตัวควบคุมเสมือนโดยใช้เมาส์ของคุณ

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