Kullanıcı girişini eylemlere bağlamak, kullanıcılara oyunun özellikleri üzerinde çok daha iyi ve sezgisel bir kontrol sağlar. Bu eğitimde, bir yeniden yükleme eylemini belirli bir tuşa bağlayacaksınız.
Başlarken
Bu eğitim, Oyun Araçları Oluştur bölümünde oluşturulan Blaster aracını kullanmaktadır. Aracı oluşturmak için bu talimatları takip edebilir veya Blaster modelini indirip StarterPack'e ekleyebilirsiniz.
Modeller, herhangi bir oyunda kullanılmak üzere Envanterinize eklenebilir. Bir modeli oyununuza eklemek için:
- Bir tarayıcıda, model sayfasını açın, Al butonuna tıklayın. Bu, modeli envanterinize ekler.
- Studio'nun Pencere menüsünden veya Ana Sayfa sekmesi araç çubuğundan Araç Kutusu 'nu açın ve Envanter sekmesini seçin.
- Aşağı açılır menünün Benim Modellerim üzerinde olduğundan emin olun.
- Blaster modelini seçerek oyuna ekleyin.
Bir eylem işleyici oluşturun
Öncelikle, kullanıcı girişi algılandığında işleyecek bir fonksiyona ihtiyacınız olacak.
Blaster içindeki ToolController LocalScript'ini açın.

Eylem için bir isim saklamak üzere bir değişken oluşturun.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function toolEquipped()tool.Handle.Equip:Play()endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)actionName, inputState ve inputObject adında üç argüman alan onAction adında bir fonksiyon oluşturun. Bu, kullanıcı girişi algılandığında çalışacak fonksiyon olacaktır.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endFonksiyonun içinde, verilen actionName'in yeniden yükleme eylem adıyla eşleşip eşleşmediğini kontrol edin ve inputState'in UserInputState.Begin (başlangıç durumu) olduğundan emin olun. Bu önemlidir çünkü fonksiyon inputState her değiştiğinde çalışacak, ancak yeniden yükleme yalnızca bir kez gerçekleşmelidir.
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendendKullanıcının yeniden yükleme yaptığında belirgin olması için, aracın TextureId değerini bir anlığına "rbxassetid://6593020923" olarak değiştirin ve ardından orijinal değeri olan "rbxassetid://92628145"'e geri döndürün.
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endend
Eylemi bağlayın
ContextActionService, belirli bir girişi algılamak için bir fonksiyonu bağlamak için BindAction fonksiyonunu kullanabilir. Bu fonksiyon birkaç argüman alır:
- Eylemin adı.
- Eylemi işleyen fonksiyon (aynı zamanda "geri çağırma" olarak da adlandırılır).
- Bir dokunmatik ekran düğmesinin görüntülenip görüntülenmeyeceği.
- Eylemle ilişkilendirilmesi gereken herhangi bir Enum.KeyCodes sayısı.
KeyCodes, klavye tuşları veya kontrolcü düğmeleri gibi farklı giriş düğümlerini temsil eden değerlerdir. Kodların tam listesi burada mevcuttur.
Script'in en üstünde ContextActionService'i alın.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"toolEquipped fonksiyonunun içinde, BindAction'ı çağırın ve aşağıdaki argümanları geçirin:
- Eylemin adı (RELOAD_ACTION)
- Eylem işleyici (onAction)
- Bir dokunmatik düğme oluşturmak için bir değer (true)
- Algılamak için bir tuş basışı (Enum.KeyCode.R)
local RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endAracı takıp klavyenizdeki R tuşuna basarak oyun testi yapın. Sırt çantası simgesi, silahın yeniden yüklendiğini belirtmek için geçici olarak bir bekleme sembolüne dönüşmelidir:
Eylemi bağlamayı kaldırın
Kullanıcı aracı çıkardığında, eylemin bağlanmaması gerekir, böylece araç takılmadan yeniden yükleme yapılamaz.
toolUnequipped adında yeni bir fonksiyon oluşturun ve UnbindAction'ı çağırarak eylem adını geçirin.
local function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)toolUnequipped fonksiyonunu Unequipped olayına bağlayarak olay tetiklendiğinde fonksiyonun çalışmasını sağlayın.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Unequipped:Connect(toolUnequipped)tool.Activated:Connect(toolActivated)Her şeyin doğru çalıştığını doğrulamak için oyun testi yapın. Araç takılıyken yeniden yükleme yapabilmeli, ancak araç çıkarıldığında yapamamalısınız.
Yeniden yükleme animasyonunuz artık tamamlandı - ekstra bir zorluk için, her blaster ateşlendiğinde bir mermi sayacını geri saymayı deneyin. Ardından, silahın mermisi kalmadığında toolActivated fonksiyonunu devre dışı bırakabilir ve yeniden yükleme animasyonu tamamlandığında tekrar etkinleştirebilirsiniz.