Oyun kolu girişi

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Roblox, Xbox ve PlayStation kontrolörleri gibi USB oyun konsollarından giriş kabul eder.Oyun konsolları farklı çeşitlerde geliyor, bu nedenle bir oyuncunun oyun konsolu girişlerinin deneyiminizde kullanılabileceğini doğrulamak için ek bir kurulum yapmanız gerekiyor.

Oyun kolu girişlerini ayarlamak için, bir oyuncunun cihazı için veya ile bağlı oyun kollarını tespit etmek, Roblox ile uyumlu desteklenen girişleri doğrulamak, giriş almak ve daha fazlası için ve daha fazlası için kullanabilirsiniz.

Oyun kolu girişlerini bağlarken, oyuncular için tutarlı bir oyun kolu deneyimi oluşturmak için ortak kontrol şemalarını görün.Girişler ayarlanırken, desteklenen kontrolörlere haptik geri bildirim dahil ederek oyuncunun deneyimini geliştirebilirsiniz.

Oyun konsollarını algıla

Bir oyuncunun cihazının şu anda UserInputService.GamepadEnabled özelliğini kullanarak bir oyun kolu aktif olup olmadığını tespit edebilirsiniz.

Oyun kolu algılanıyor

local UserInputService = game:GetService("UserInputService")
if UserInputService.GamepadEnabled then
print("Player has gamepad enabled...")
end

Bağlı oyun konsollarını UserInputService.GamepadConnected ve UserInputService.GamepadDisconnected etkinlikleri aracılığıyla kontrol edebilirsiniz.Bu olaylar, bir cihaz bağlandığında veya bağlantı kesildiğinde ayrı ayrı ateş edilir ve her iki olay da olaya neden olan oyun kolu gösteren bir Enum.UserInputType geçer.Çoğu durumda, bağlı oyun kolu Gamepad1 dir.

Bağlantı ve Bağlantının Kesilmesi Kontrolü

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)

Ayrı bir kontrolörün UserInputService:GetGamepadConnected() yöntemi kullanılarak bağlı olup olmadığını da sorgulayabilirsiniz.Bu bir argüman olarak Enum.UserInputType alır ve yalnızca Gamepad1 değerlerini kabul eder Gamepad8 .

Soru Özel Gamepad Bağlantısı

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

Desteklenen girişleri doğrula

Oyun konsollarının farklı giriş setlerine sahip olabileceğinden, hangi girişlerin desteklendiğini UserInputService:GetSupportedGamepadKeyCodes() ile kontrol etmelisiniz.Bu yöntem bir argüman olarak bir Enum.UserInputType alır ve belirtilen kontrolör için tüm mevcut girişlerin bir listesi ile bir tablo döndürür.

Desteklenen Girişler Doğrulanıyor

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

Giriş almak

oyun konsollarına ve diğer giriş kaynaklarına kontroller bağlamak için yararlıdır, örneğin fare ve klavye girişleri veya mobil dokunma ekran düğmeleri, veya birden fazla işlevin tek bir düğme girişine bağlanması için herhangi bir cihazda.Örneğin, aşağıdaki kod örneği bir OpenSpellBook eylemini oyun konsolunun ButtonR2 düğmesine ve klavyenin B anahtarbağlar.

Kontekst Eylem Hizmeti Eylem Bağlama

local ContextActionService = game:GetService("ContextActionService")
local function openSpellBook(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
-- Büyü kitabını aç
end
end
ContextActionService:BindAction("OpenSpellBook", openSpellBook, false, Enum.KeyCode.ButtonR2, Enum.KeyCode.B)

Alternatif olarak, kontrolleri doğrudan bir oyun kumandasından bağlamak için UserInputService kullanabilirsiniz.Bu hizmet aracılığıyla oyun kolu olaylarını tespit ederken, düğme ilk basıldığında InputBegan etkinliğini kullanın ve düğme serbest bırakıldığında InputEnded etkinliğini tespit edin.Kullanım işlevinde, InputObject.UserInputType özelliği hangi oyun kolu olayı ateşlediğini ve InputObject.KeyCode özel düğme veya çubuklarının onu ateş ettiğini gösterir.

KullanıcıGirişHizmeti Düğme Basma Tespiti

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)

Oyun kolu durumu

Oyun konsolundaki tüm düğmelerin ve çubukların mevcut durumunu UserInputService:GetGamepadState() yöntemi ile tespit edebilirsiniz.Bu, deneyiminizde ayrı bir olay meydana geldiğinde mevcut oyun kumandası girişlerini kontrol etmeniz gerektiğinde, karakter bir nesneye dokunduğunda belirli düğmelerin basılıp basılmadığını kontrol etmek gibi durumlarda yararlıdır, örneğin bir karakter bir nesneye dokunduğunda belirli düğmeler basılıp basılmadığını kontrol etmek.

Oyun Konsolu Girişlerinin Durumunu Kontrol Etme

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")
-- Sol ayağın bir şeyle temasa geçtiğinde, oyun kolu giriş durumunu kontrol edin
leftFoot.Touched:Connect(function(hit)
local state = UserInputService:GetGamepadState(Enum.UserInputType.Gamepad1)
for _, input in state do
-- ButtonR2 şu anda basılı tutuluyorsa, bir mesaj basın
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)

Basıncı tetikle

Giriş tetikleyicisinin Position.Z değerini kontrol ederek oyun kolu tetikleyicisine ne kadar baskı uygulandığını tespit edebilirsiniz.

Test Tetikleme Basıncı

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)

Sıradan kontrol şemaları

Oyun konsolları çeşitli şekillerde ve boyutlarda gelir.Oyuncu girişinin herhangi bir yöntemiyle olduğu gibi, farklı oyun ve deneyimler arasında biraz tutarlılık oluşturmak en iyisidir.

Oyuncuların hemen oyun kumanda denetimleraşina ve rahat hissetmesine yardımcı olacak yaygın giriş bağları aşağıdakilerdir:

GirişSıradan kullanım durumları
ButtonAOyuncu istemlerini veya GUI seçimlerini kabul eder. Aksi takdirde, atlama gibi temel eylemler için kullanılır.
ButtonBOyuncu istemelerini veya GUI seçimlerini iptal eder. Ayrıca bir atış, rulo veya sprint gibi ikincil eylemler için kullanılır.
Thumbstick1Genellikle karakter hareketiyle ilişkilidir.
Thumbstick2Genellikle kamera hareketiyle ilişkilidir.
ButtonL2 , ButtonR2Genellikle atış gibi temel eylemler için kullanılır.
ButtonL1 , ButtonR1 , ButtonX , ButtonYYeniden yükleme, hedefleme veya envanter veya minimapa'ya erişme gibi ikincil eylemler.

Haptik geri geri dönüş

Birçok oyun kolu kontrolörü, haptik geri geri dönüşsağlamak için motorlara sahiptir.Gürültü ve vibrasyon eklemek, bir oyuncunun deneyimini büyük ölçüde artırabilir ve görüntülerin veya seslerin ötesinde ince geri bildirim sağlayabilir.Motorları açmadan önce HapticService için kullanabilirsinizönce çeviren.

Vibrasyon desteği

Tüm kontrolörlerin motoru yok, bu nedenle haptik motorları kullanmaya çalışmadan önce destek kontrol etmek önemlidir.Verilen bir kontrolörün vibrasyon desteği olup olmadığını sorgulamak için HapticService:IsVibrationSupported() 'yi arayın.

Vibrasyon Desteğini Kontrol Et

local HapticService = game:GetService("HapticService")
local gamepad = Enum.UserInputType.Gamepad1
local isVibrationSupported = HapticService:IsVibrationSupported(gamepad)

Bazı kontrolörlerin çeşitli titreşim ölçekleri için çok sayıda motoru vardır.Bir oyun kolu titreşimi destekliyor mu kontrol ettikten sonra, HapticService:IsMotorSupported() aracılığıyla kullanmayı planladığınız motorları da desteklediğini kontrol etmelisiniz.

Desteklenen Motorları Kontrol Et

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
Boyut veya KonumAçıklama
LargeGenel gürültü için daha büyük motor, yararlı.
SmallDaha küçük motor, lastiklerin kayması gibi daha ince gürültülere, elektrik çarpması vb. yararlı
LeftTriggerSol tetik altında.
RightTriggerSağ tetik altında.
LeftHandKontrolörün sol tarafında.
RightHandKontrolörün sağ tarafında.

Motorları etkinleştirin

Bir oyuncunun oyun kolu titreşimi destekliyor olduğunu doğruduktan sonra, belirli bir motoru HapticService:SetMotor().Bu yöntem oyun kolu ve titreşimin sıklığını argüman olarak alır.Amplitüde 0 ile 1 arasında herhangi bir değer olabilir.

Motoru Aktifleştirme

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

Kontrolör emülasyonu

Kontrolör Emülatörü doğru bir şekilde oyun kolu girişini Studio'da doğrudan emule edebilmenizi sağlar.Varsayılan denetleyici genel bir oyun konsolu, ancak üst sol seçici menüsünden PlayStation, Xbox ve Quest cihazları için alternatifler seçebilirsiniz.

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

Oynatma testi sırasında, deneyimi fare kullanarak sanal kontrolörle kontrol edebilirsiniz.

Ayrıca sağ üst köşede Haritaları düzenle düğmesine tıklayarak sanal kontrolör için anahtar haritalarını görüntüleyip düzenleyebilirsiniz, örneğin E ile ButtonL2 veya 9 ile ButtonA .Bu eşleştirmeler diğer Stüdyo ayarları gibi kaydedilir (kontrolör başına, kullanıcı başına, bilgisayar başına) ve hem emülatör penceresinde hem de 3D görüntü penceresinde oyun kolu etkinliklerine çevrilir.