Çoklu platformlu Girdi Eylem Sistemi, eylemleri bağlayıp çeşitli donanım girdileri arasında bağlamaları düzenlemenizi sağlar. Bağlamalar ile bir araya getirildiğinde, herhangi bir cihazda herhangi bir oyun aşamasında çalışan modüler bir girdi sistemini kolayca yapılandırabilir ve düzenleyebilirsiniz. Kullanım senaryoları arasında şunlar bulunur:
- Oyuncunun savaş modunda mı yoksa seyirci modunda mı olduğuna bağlı olarak eylemlerin dinamik olarak yer değiştirdiği bir birinci şahıs nişancı sistemi.
- Hızlanma/yavaşlama, araç yükselticileri ve yakıt istasyonlarıyla donatılmış kapsamlı bir sürüş sistemi.
- Bir dövüş oyununda hamlelerin pürüzsüz bir şekilde değiştirilebileceği bir beceri sistemi için kısayollar.
Girdi bağlamları
Bir InputContext, ilişkili girdi eylemlerini barındıran bir eylem koleksiyonudur; örneğin, oyun içi karakter kontrolleri için PlayContext ve UI menüleri arasında gezinme kontrolleri için NavContext. Bağlamları (ve bunlara karşılık gelen eylemleri) Enabled özelliği aracılığıyla etkinleştirebilir/devre dışı bırakabilirsiniz; örneğin, bir envanter menüsü açıkken NavContext'i etkinleştirip oyuncu menüyü kapattığında ve birincil oyuna döndüğünde PlayContext'e geçiş yapabilirsiniz.
Bir oyun başlangıçta birden fazla girdi bağlamı kullanmıyorsa bile, herhangi bir girdi sisteminin en üst seviyesinde bir temel bağlam oluşturulması önerilir; örneğin, oyun sırasında gerçekleşen girdi için PlayContext örneği.
- TAVSİYEÇeşitli girdi bağlamlarını barındıracak şekilde ReplicatedStorage içinde Inputs adında bir Folder oluşturun.

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

Özellikler penceresinde, Priority değerini 2000 olarak ayarlayın ve Sink'i etkinleştirin. Sink etkinleştirildiğinde, öncelik düzeyinde, bağlı KeyCodes için girdi olaylarını tüketir ve bu girdilerin daha düşük öncelikli bağlamlara ulaşmasını engeller. Bu, açıkken belirli oyun girdi işlemlerini bastırması gereken bir envanter ekranı gibi kullanım senaryoları için kullanılabilir. Bu örnekte, PlayContext, bağlı girdilerini varsayılan PlayerScripts bağlamları işlemden geçmeden önce engelleyecek kadar yüksek bir Priority değerine sahiptir.
Girdi eylemleri
Bir InputAction, "Sıçra", "Koş", veya "Ateş et" gibi bir oyun eylemi mekanizmasını tanımlar. Bu eylemler, girdi bağlamaları kullanılarak donanım girdilerine eşlenir.
Bir InputAction, Type özelliğine bağlı olarak birkaç varyasyona sahip olabilir (Enum.InputActionType). Varsayılan değer Bool'dur ve bu, ButtonA, E, veya MouseLeftButton gibi girdilerin basılması/serbest bırakılması ile true/false değerlerini almak için tasarlanmıştır.
| Girdi Eylem Türü | Örnek Kullanım |
|---|---|
| Bool | Basılı/serbest bırakılmış eşikleri destekleyen atlama, ateş etme, koşma gibi tetiklenen eylemler. |
| Direction1D | Bir arabanın hızlanma pedalı veya bir görüş dürbününün zoom seviyesi gibi değişken sıfırdan tamamen basılı eylemler. |
| Direction2D | Kamera döndürme veya standart Roblox karakter hareketi gibi 2D yönlü hareket. |
| Direction3D | Yukarı/aşağı levitasyon yapabilen, hızlanıp yavaşlayabilen ve sola/sağa kayabilen bir hava aracı gibi 3D yönlü hareket. |
| ViewportPosition | Özel imleçler veya dünyadaki nesneleri seçmek için raycasting gibi fare girdi gibi 2D görünüm koordinatları. |
Basit bir karakter sprinti için bir InputAction test etmek üzere:
ReplicatedStorage içindeki PlayContext bağlamı içinde yeni bir InputAction oluşturun. Adını, özelleşmiş eylemini belirtmek için CharacterSprint olarak değiştirin.

Özellikler penceresinde, eylemin Type değerinin Bool olduğunu gözlemleyin (varsayılan). Bu, basılı/serbest bırakılmış bir eylem olarak true/false eylemi için mantıksal bir türdür (karakter ya koşuyor ya da koşmuyor).

Girdi bağlamaları
Bir InputBinding, hangi donanım bağlamasının bağlı olan InputAction'ı tetiklemesi gerektiğini tanımlar; örneğin, bir tuşa basma, oyun kumandası düğmesi veya dokunmatik özellikli bir cihazda bir dokunuş. Çoklu platform uyumluluğu için her bir InputAction, burada gösterildiği gibi oyun kumandası, klavye/fare ve dokunmatik için bir InputBinding bulundurmalıdır.

Ana InputAction'a atanmış olan Type, çocuk InputBinding örnekleri için geçerli olan genel girdi türlerini (tuş/düğme/dokunma, analog tetikleyici, joyistik vb.) doğrudan etkiler. Aynı şekilde, ana eylemin bağlı olaylarına gönderilen değerler, bir bağlamanın seçilen girdi türüne bağlıdır. Eylem türleri, bağlamalar ve dönüş değerleri arasındaki ilişki için girdi olaylarını kontrol edin.
Basit karakter sprinti için bağlamaları bağlamak üzere:
CharacterSprint eylemine yeni bir InputBinding ekleyin ve adını KeyboardBinding olarak değiştirin. Sonra, bağlamanın KeyCode özelliğini LeftShift olarak ayarlayın.


Fare Shift kilidinin tuş bağlamasıyla çakışmaması için, Explorer'da StarterPlayer'ı seçin ve Özellikler penceresinde EnableMouseLockOption'ı devre dışı bırakın.


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


StarterGui içerisindeki bir ScreenGui konteynerinin içine bir ekran butonu ekleyin, adını SprintButton olarak değiştirin ve istediğiniz gibi konumlandırıp/ölçeklendirin.


CharacterSprint eylemine üçüncü bir InputBinding ekleyin ve adını TouchBinding olarak değiştirin. Sonra, Özellikler penceresinde, bağlamanın UIButton özelliğini önceki adımda oluşturduğunuz SprintButton butonuna bağlayın.


Girdi olayları
InputAction örneği, InputBindings'ten gelen oyuncu girdisini işlemek üzere üç yerleşik olay içerir.
- StateChanged — Bu olay, durum değiştiğinde tüm girdi eylem türleri için tetiklenir; durum aynı duruma geçmeye çalışmadığı sürece.
Bir girdi eyleminin Type'ı (Bool, Direction1D, Direction2D, Direction3D veya ViewportPosition) ve bir çocuk InputBinding'den (tuş/düğme/dokunma, analog tetikleyici, joyistik vb.) gelen genel girdi türüne bağlı olarak, Pressed, Released ve StateChanged olay işleyicilerine farklı değerler döner. Aşağıdaki tablolar, ilişkiyi daha iyi anlamanıza yardımcı olacaktır.
Bool türü, atlama, ateş etme, koşma gibi tetiklenen eylemler için en iyi şekilde kullanılır ve analog girdilerde basılı/serbest bırakılmış eşikleri destekler.
| InputBindings Üzerindeki Geçerli Girdi Türleri | InputAction Olay(ları) ile Döndürülen Değerler |
|---|---|
| Klavyedeki tuşlardan veya temel fare/oyun kumandası düğmelerinden, bağlamanın KeyCode özelliği aracılığıyla elde edilen boolean girdiler veya bağlamanın UIButton özelliği aracılığıyla bir GuiButton basma/serbest bırakma. |
|
| Bağlamanın KeyCode özelliği aracılığıyla elde edilen, oyun kumandası tetikleyicilerinden (ButtonL2/ButtonR2) gelen değişken girdi miktarları. |
|
Basit bir karakter sprinti için olayları bağlamak üzere:
CharacterSprint ağacına yeni bir Script ekleyin; bu, çeşitli girdi bağlamalarının yanında yer almalıdır. Sonra RunContext değerini Client olarak ayarlayın ve adını OnActivate olarak değiştirin.

Aşağıdaki kodu OnActivate betiğine yapıştırın. 13-15. satırlardaki Pressed olayı bağlantısının, sprint girdi bağlaması basıldığında karakterin yürüyüş hızını iki katına çıkardığını ve 16-18. satırlardaki ilgili Released olay bağlantısının, sprint girdi bağlaması serbest bırakıldığında yürüyüş hızını varsayılan değere sıfırladığını unutmayın.
OnActivate (İstemci Betiği)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)Oyununuzu oynatın ve daha önce seçtiğiniz bağlamalar ile karakter sprint eylemini test edin: klavye için LeftShift, oyun kumandası için ButtonY ve dokunmatik özellikli cihazlar için ekran üzerindeki SprintButton. Oyun kumandası girdilerini doğrudan Roblox Studio'da test etmek için Kontrolcü Emülatörü kullanabileceğinizi unutmayın.
Bağlam değişiklikleri
Bir girdi bağlamı olan PlayContext gibi bağlamlar, oyun sırasında script aracılığıyla etkinleştirip/devre dışı bırakabilir, hangi eylemlerin başkalarına göre öncelikli olacağını belirlemek için Priority değerini değiştirebilir ve düşük önceliğe sahip bağlamlarda işlenmesini engellemek için Sink kullanabilirsiniz.
Diğer scriptlerden bağlamları değiştirmeyi kolaylaştırmak için, ReplicatedStorage içindeki girdi klasörünüze yeni bir BindableEvent ekleyin ve adını ContextEvent olarak değiştirin.

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

UpdateContext scripti içinde, aşağıdaki kodu yapıştırın:
UpdateContext (İstemci Betiği)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("InputContext bulunamadı!")endend)UpdateContext scripti yerleştirildiğinde, bir adlandırılmış InputContext'ı bağlanabilir olayı ateşleyerek güncelleyebilirsiniz; örneğin bir LocalScript üzerinden, bir GuiButton'ı bir ScreenGui konteyneri içinde çalıştıran bir yerleştirme.
Buton Betiğilocal ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")local button = script.Parentbutton.Activated:Connect(function()-- Hedef girdi bağlamı ve etkin durum ile bağlanabilir olayı tetikleyincontextEvent:Fire("PlayContext", true)end)
Varsayılan bağlamalar
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 |