Çoklu platform Giriş Eylem Sistemi, eylemleri bağlamanıza ve çeşitli donanım girişleri arasında bağlamaları düzenlemenize olanak tanır. Bağlamalar ile birleştirildiğinde, herhangi bir cihazda herhangi bir oyun aşamasında çalışan modüler bir giriş sistemini kolayca yapılandırabilir ve düzenleyebilirsiniz. Kullanım durumları arasında şunlar bulunmaktadır:
- Oyuncunun savaş modunda mı yoksa izleyici modunda mı olduğuna bağlı olarak eylemlerin dinamik olarak değiştiği bir birinci şahıs nişancı sistemi.
- Hızlanma/yavaşlama, araç güçlendiricileri ve yakıt istasyonları ile donatılmış kapsamlı bir sürüş sistemi.
- Bir dövüş oyunundaki yetenekler sistemi için sıcak tuşlar, oyuncuların bir yumruğu kaçırmadan hareketleri sorunsuz bir şekilde değiştirmesine olanak tanır.
Giriş bağlamları
Bir InputContext, ilgili giriş eylemlerini tutan bir eylem koleksiyonudur; örneğin, oyun içi karakter kontrolleri için PlayContext ve UI menülerinde gezinmek için NavContext. Enabled özelliği aracılığıyla bağlamları etkinleştirebilir/devre dışı bırakabilirsiniz (ve bunlara karşılık gelen eylemleri), örneğin bir envanter menüsü açıkken NavContext'u etkinleştirip, oyuncu menüyü kapattığında PlayContext'a geçiş yapabilirsiniz.
Bir oyun başlangıçta birden fazla giriş bağlamı kullanmasa bile, herhangi bir giriş sisteminin en üst düzeyinde bir ana bağlam oluşturulması önerilir; örneğin, oyun sırasında gerçekleşen girişler için PlayContext örneği.
- TAVSİYE EDİLENReplicatedStorage içinde Inputs adında bir Folder oluşturun ve çeşitli giriş bağlamlarını burada tutun.

Klasöre yeni bir InputContext ekleyin ve adını PlayContext olarak değiştirin.

- İSTEĞE BAĞLIÖzellikler penceresinde, Priority değerini 2000 olarak ayarlayın ve Sink'i etkinleştirin. Sink etkinleştirildiğinde, bağlandığı KeyCodes için giriş olaylarını öncelik seviyesinde tüketir ve bu girişlerin daha düşük öncelikli bağlamlara ulaşmasını engeller. Bu, açıkken belirli oyun içi girişleri bastırması gereken bir envanter ekranı gibi kullanım durumları için pratik bir çözümdür. Bu örnekte, PlayContext'a, varsayılan PlayerScripts bağlamları işlemden önce bağlı girişlerini batıracak kadar yüksek bir Priority verilmiştir.

Giriş eylemleri
Bir InputAction, "Zıpla", "Koş" veya "Ateş Et" gibi bir oyun mekanizmasını tanımlar. Bu eylemler daha sonra giriş bağlamaları kullanılarak donanım girişlerine haritalanır.
Bir InputAction, Type özelliğine bağlı olarak birkaç varyasyona sahip olabilir (Enum.InputActionType). Varsayılan olarak Bool kullanılır ve ButtonA, E veya MouseLeftButton gibi girişlerin basılması/serbest bırakılması ile true/false değerlerini alacak şekilde tasarlanmıştır.
| Giriş Eylem Türü | Örnek Kullanım |
|---|---|
| Bool | Basılı/serbest bırakma eşiklerini destekleyen zıplama, ateş etme, koşma gibi tetiklenen eylemler. |
| Direction1D | Bir aracın gaz pedalı veya bir görüş alanının zoom seviyesi gibi değişken sıfırdan tam eylemler. |
| Direction2D | Kamera döndürme veya standart Roblox karakter hareketi gibi 2D yönlü hareket. |
| Direction3D | Havada süzülen bir aracın yukarı/aşağı hareket edebilmesi, hızlanabilmesi/yavaşlayabilmesi ve sola/sağa kayabilmesi gibi 3D yönlü hareket. |
| ViewportPosition | Özel imleçler veya dünya nesnelerini seçmek için ışın izleme gibi fare girişi gibi 2D görüntüleme koordinatları. |
Basit karakter koşusu için bir InputAction test etmek için:
- TAVSİYE EDİLENExplorer içindeki en üst düzey Workspace nesnesini seçin ve ardından Özellikler penceresinde PlayerScriptsUseInputActionSystem özelliğini Enabled olarak ayarlayın.
ReplicatedStorage içindeki PlayContext bağlamı içinde yeni bir InputAction oluşturun. Adını, özel eylemini belirtmek için CharacterSprint olarak değiştirin.

Özellikler penceresinde, eylemin Type değerinin Bool (varsayılan) olduğunu göreceksiniz. Bu, basit karakter koşusu için mantıksal bir türdür çünkü boolean true/false eylemi (karakter ya koşuyor ya da koşmuyor) olarak işlev görür.

Giriş bağlamaları
Bir InputBinding, hangi donanım bağlamasının ana InputAction'ı tetiklemesi gerektiğini tanımlar; örneğin bir tuş basımı, oyun kumandası düğmesi veya dokunmatik cihazda bir dokunuş. Çoklu platform uyumluluğu için, her InputAction'ın oyun kumandası, klavye/fare ve dokunmatik için bir InputBinding'e sahip olması gerekir.

Roblox, hareket, kamera kontrolü ve temel çevre etkileşimi için varsayılan giriş bağlama seçenekleri sağlar — Roblox oyuncuları bu kontrollerle tanıdık olduğu için, bunları yalnızca belirli durumlarda geçersiz kılmalısınız. Ayrıca, rezerv girişlerin geçersiz kılınamayacağını ve her zaman amaçlandığı gibi çalışacağını unutmayın.
| İşlem | Fare/Klavye | Oyun kumandası | Dokunmatik |
|---|---|---|---|
| Roblox menüsünü aç | Esc | Başlat düğmesi (ButtonStart) | Yok |
| Geliştirici Konsolu | F9 | Yok | Yok |
| Tam ekran modu (Windows) Masaüstünü göster (Mac) | F11 | Yok | Yok |
| Video kaydet (Windows) | F12 | Yok | Yok |
| Ekran görüntüsü al | PrintScreen | Yok | Yok |
Ana InputAction'a atanan Type, doğrudan hangi genel giriş türlerinin (tuş/düğme/dokunma, analog tetikleyici, parmaklık vb.) çocuk InputBinding örnekleri için geçerli olduğunu etkiler. Bunun sonucunda, ana eylemin bağlı olaylarına gönderilen değerler, bir bağlamanın seçilen giriş türüne bağlıdır. Eylem türleri, bağlamalar ve dönen değerler arasındaki ilişki hakkında daha fazla bilgi için giriş olaylarına bakın.
Basit karakter koşusu için bağlamaları bağlamak için:
CharacterSprint eylemine yeni bir InputBinding ekleyin ve adını KeyboardBinding olarak değiştirin. Ardından, bağlamanın KeyCode özelliğini LeftShift olarak ayarlayın.


CharacterSprint eylemine ikinci bir InputBinding ekleyin ve adını GamepadBinding olarak değiştirin. Ardından, bağlamanın KeyCode özelliğini ButtonY olarak ayarlayın.


StarterGui içindeki bir ScreenGui konteynerinin içine bir ekran düğmesi oluşturun, adını SprintButton olarak değiştirin ve istediğiniz gibi konumlandırın/ölçeklendirin.


CharacterSprint eylemine üçüncü bir InputBinding ekleyin ve adını TouchBinding olarak değiştirin. Ardından, Özellikler penceresinde, bağlamanın UIButton özelliğini daha önce StarterGui içinde oluşturduğunuz SprintButton düğmesine bağlayın.


Giriş olayları
InputAction örneği, InputBindings'ten gelen oyuncu girişini işlemek için üç yerleşik olay içerir.
- StateChanged — Bu olay, durum değiştiğinde tüm giriş eylem türleri için tetiklenir, ancak durum aynı duruma geçiş yapmaya çalışıyorsa tetiklenmez.
Giriş eyleminin Type'ı (Bool, Direction1D, Direction2D, Direction3D veya ViewportPosition) ve bir çocuk InputBinding'den gelen genel giriş türüne (tuş/düğme/dokunma, analog tetikleyici, parmaklık vb.) bağlı olarak, Pressed, Released ve StateChanged olay işleyicilerine dönen farklı değerler vardır. Aşağıdaki tablolara bakarak ilişkiyi daha iyi anlayabilirsiniz.
Bool türü, zıplama, ateş etme, koşma gibi tetiklenen eylemler için en iyi türdür ve analog girişlerde basılı/serbest bırakma eşiklerini destekler.
| InputBindings Üzerindeki Geçerli Giriş Türleri | InputAction Olay(ları) için Dönen Değerler |
|---|---|
| Bağlamanın KeyCode özelliği aracılığıyla klavye tuşlarından veya temel fare/oyun kumandası düğmelerinden gelen boolean girişler veya bağlamanın UIButton özelliği aracılığıyla bir GuiButton basılması/serbest bırakılması. |
|
| Bağlamanın KeyCode özelliği aracılığıyla oyun kumandası tetikleyicilerinden (ButtonL2/ButtonR2) gelen değişken giriş miktarları. |
|
Basit karakter koşusu için olayları bağlamak için:
CharacterSprint ağacına yeni bir Script ekleyin, çeşitli giriş bağlamalarının yanına. Ardından, RunContext değerini Client olarak ayarlayın ve adını OnActivate olarak değiştirin.

OnActivate scriptine aşağıdaki kodu yapıştırın. Pressed olay bağlantısının 13-15 satırlarında, bir sprint giriş bağlaması basıldığında karakterin yürüyüş hızını iki katına çıkardığını ve Released olay bağlantısının 16-18 satırlarında, bir sprint giriş bağlaması serbest bırakıldığında yürüyüş hızını varsayılan değere sıfırladığını unutmayın.
OnActivate (Client Script)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)Oyununuza test yapın ve daha önce seçtiğiniz bağlamalar ile karakter koşu eylemini test edin: klavye için LeftShift, oyun kumandası için ButtonY ve dokunmatik cihazlar için ekran üzerindeki SprintButton. Oyun kumandası girişlerini doğrudan Roblox Studio'da test etmek için Kontrolcü Emülatörü kullanabileceğinizi unutmayın.
Bağlam değişiklikleri
Bir giriş bağlamı oluşturduktan sonra, örneğin PlayContext, oyun sırasında betik aracılığıyla etkinleştirebilir/devre dışı bırakabilir, hangi eylemlerin diğerlerinin önceliğini belirlemek için Priority değerini değiştirebilir ve Sink'in daha düşük öncelikli bağlamlar içinde işlenmesini engelleyebilirsiniz.
Diğer betiklerden bağlamları değiştirmeyi kolaylaştırmak için, ReplicatedStorage içindeki girişler klasörünüze yeni bir BindableEvent ekleyin ve adını ContextEvent olarak değiştirin.

Aynı seviyede yeni bir Script oluşturun, RunContext değerini Client olarak ayarlayın ve adını UpdateContext olarak değiştirin.

UpdateContext scriptinin içine aşağıdaki kodu yapıştırın:
UpdateContext (Client Script)local ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")-- Bağlanabilir olayı bağlacontextEvent.Event:Connect(function(targetContext, enabled)local context = inputsFolder:FindFirstChild(targetContext)if context thencontext.Enabled = enabledprint(context.Name .. ": " .. tostring(context.Enabled))elsewarn("Giriş Bağlamı bulunamadı!")endend)UpdateContext scriptini yerleştirdikten sonra, artık bir InputContext'ı adlandırarak güncelleyebilirsiniz; örneğin, bir LocalScript'ten, bir ScreenGui konteyneri içindeki bir GuiButton'ı çalıştırarak.
Düğme Scriptilocal ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")local button = script.Parentbutton.Activated:Connect(function()-- Hedef giriş bağlamı ve etkin durum ile bağlanabilir olayı tetiklecontextEvent:Fire("PlayContext", true)end)
Bağlamaları Gösterme
eylemleri ve bağlamaları ayarladıktan sonra, genellikle oyunculara, her eylemi tetikleyen tuş veya düğmeyi ekran üzerindeki yardımcı ipuçları aracılığıyla göstermeniz gerekir:

Giriş Eylem Sistemi iki yaklaşım sunar:
- TAVSİYE EDİLENInputActionLabel — Doğru girişi her platform için otomatik olarak görüntüleyen, kod yazmadan sürükleyip bırakabileceğiniz bir GuiObject.
- ORTA SEVİYEPreferredBinding — Özel UI'de bağlamaların nasıl görüntüleneceği üzerinde tam kontrol isteyen yaratıcılar için salt okunur bir InputAction özelliği.
InputActionLabel, herhangi bir ScreenGui veya SurfaceGui içine ekleyebileceğiniz bir GuiObject'dır. InputAction özelliği, mevcut bir InputAction örneğine referans vermek için ayarlandığında, otomatik olarak oyuncunun mevcut giriş cihazı için doğru tuş bağlamasını çözer ve görüntüler — kod yazmaya gerek yoktur. Oyuncu cihazları değiştirdiğinde (örneğin, klavye kullandıktan sonra bir oyun kumandası alındığında) veya bir kontrolü yeniden bağladığında, etiket anında güncellenir.
Bir InputActionLabel eklemek için:
StarterGui içindeki bir ScreenGui konteynerinin içine bir InputActionLabel ekleyin, diğer GuiObject'lar gibi.
Özellikler penceresinde, InputAction özelliğini görüntülemek istediğiniz InputAction örneğine ayarlayın (örneğin, ReplicatedStorage altında "Sprint" eyleminiz) ve istediğiniz gibi konumlandırın/ölçeklendirin.
Etiket neyi göstereceğini çözdüğünde, aşağıdakileri sırayla kontrol eder:
Özel Resimler — Eğer çocuk InputBindings'in DisplayImage özelliği ayarlanmışsa, etiket bu resimleri doğrudan görüntüler.
Platform Tuş Resimleri — Özel resimler yoksa, etiket, çocuk InputBindings için platform tarafından sağlanan resimleri UserInputService:GetImageForKeyCode() aracılığıyla görüntüler, eğer böyle resimler mevcutsa. Bileşik bağlamalar, + ayırıcıları ile birden fazla simge gösterir.
Özel İsimler — Yukarıdakilerin hiçbiri mevcut değilse, eğer çocuk InputBindings'in DisplayName özelliği ayarlanmışsa, etiket bu metni etiketin stil özelliklerini kullanarak görüntüler.
Platform Tuş Dize — Yukarıdakilerin hiçbiri mevcut değilse, etiket platform tarafından sağlanan dizeleri UserInputService:GetStringForKeyCode() aracılığıyla görüntüler.
Eğer hiçbir InputAction atanmadıysa veya hiçbir çocuk InputBinding yoksa, etiket bir yer tutucu simgesi görüntüler.
Giriş Eylem Yöneticisi
Giriş Eylem Yöneticisi aracı, giriş mimarinizi tasarlamak, denetlemek ve ölçeklendirmek için birleşik, matris tarzı bir arayüzdür.
Erişmek için, Studio'daki Pencere menüsüne gidin ve Giriş ⟩ Giriş Eylem Yöneticisi'ni seçin. Oyun zaten giriş bağlamaları, eylemleri veya bağlamaları kullanıyorsa, yönetici otomatik olarak DataModel'i tarar ve mevcut örnekleri düzenleyici ızgarasına çıkarır. Yeni girişle ilgili örnekler, otomatik olarak ReplicatedStorage içindeki bir Inputs klasörüne yerleştirilir.

Yukarıdaki bölümlerde belirtilen karakter koşusu için bir giriş ayarı yapılandırmak için:
- TAVSİYE EDİLENExplorer içindeki en üst düzey Workspace nesnesini seçin ve ardından Özellikler penceresinde PlayerScriptsUseInputActionSystem özelliğini Enabled olarak ayarlayın.
StarterGui içindeki bir ScreenGui konteynerinin içine bir ekran düğmesi oluşturun, adını SprintButton olarak değiştirin ve istediğiniz gibi konumlandırın/ölçeklendirin.

Giriş Eylem Yöneticisi'nde Bağlam sütun başlığının üzerine gelin ve + düğmesine tıklayın. Yeni bağlama için uygun bir ad girin, örneğin PlayContext ve Enter tuşuna basın. Eşleşen bir InputContext ReplicatedStorage içinde görünür.


Yeni bağlamanın üzerine gelin ve + düğmesine tıklayın. Açılır menüden Bool seçin, eylemin adı olarak CharacterSprint girin ve Enter tuşuna basın. Eşleşen bir InputAction bağlamanın altında görünür.


CharacterSprint ağacına yeni bir Script ekleyin, çeşitli giriş bağlamalarının yanına. Ardından, RunContext değerini Client olarak ayarlayın ve adını OnActivate olarak değiştirin.

OnActivate scriptine aşağıdaki kodu yapıştırın. Pressed olay bağlantısının 13-15 satırlarında, bir sprint giriş bağlaması basıldığında karakterin yürüyüş hızını iki katına çıkardığını ve Released olay bağlantısının 16-18 satırlarında, bir sprint giriş bağlaması serbest bırakıldığında yürüyüş hızını varsayılan değere sıfırladığını unutmayın.
OnActivate (Client Script)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)
