Kullanıcı girişini eylemlerle bağlamak, kullanıcılara deneyimin özellikleri üzerinde çok daha iyi ve sezgisel bir kontrol sağlar. Bu öğreticide, bir yeniden yükleme eylemini belirli bir tuşa bağlayacaksınız.
Başlarken
Bu öğretici, Oyun Araçları Oluştur bölümünde oluşturulan Blaster aracını kullanmaktadır. Bu talimatları izleyerek aracı oluşturabilir veya Blaster modelini indirip StarterPack'e ekleyebilirsiniz.
Modeller, herhangi bir deneyimde kullanılmak üzere envanterinize eklenebilir. Bir modeli deneyiminize 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çılır menünün Benim Modellerim seçeneğinde olduğundan emin olun.
- Blaster modelini seçin ve deneyime ekleyin.
Bir eylem işleyici oluşturma
Öncelikle, kullanıcı girişi algılandığında işleyecek bir fonksiyona ihtiyacınız olacak.
Blaster içindeki ToolController LocalScript dosyasını açın.

Eylem için bir isim tutacak 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 adlı üç argüman alan onAction adlı 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()endFonksiyon içinde, verilen actionName'in yeniden yükleme eylem adıyla eşleştiğini kontrol edin ve inputState'in UserInputState.Begin (başlangıç durumu) olduğundan emin olun. Bu önemlidir çünkü fonksiyon inputState değiştiğinde her seferinde çalışacaktır, ancak yeniden yükleme yalnızca bir kez yapılmalıdır.
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendendKullanıcının yeniden yükleme işlemi yaptığını açıkça göstermek için, aracın TextureId değerini bir an için "rbxassetid://6593020923" olarak değiştirin ve ardından bunu orijinal değeri olan "rbxassetid://92628145" değerine geri değiştirin.
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ğlama
ContextActionService, bir BindAction fonksiyonu kullanarak belirli bir girişi bir fonksiyona bağlamak için kullanılabilir. 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 butonunun gösterilip gösterilmeyeceği.
- Eylemle ilişkilendirilecek ve algılanacak herhangi bir Enum.KeyCodes değeri.
KeyCodes, klavye tuşları veya denetleyici butonları gibi farklı giriş düğmelerini temsil eden değerlerdir. Tüm kodların listesini buradan bulabilirsiniz.
Script'in başında ContextActionService'i alın.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"toolEquipped fonksiyonunun içine gidin, BindAction çağrısını yapın ve aşağıdaki argümanları geçirin:
- Eylemin adı (RELOAD_ACTION)
- Eylem işleyici (onAction)
- Bir dokunma butonu oluşturmak için bir değer (true)
- Algılanacak bir tuş vuruşu (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ı giyin ve klavyenizdeki R tuşuna basarak oyun testini 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 geri alma
Kullanıcı aracı çıkardığında, eylemin geri alınması gerekir; böylece kullanıcı, araç giyilmeden yeniden yükleme yapamaz.
toolUnequipped adında yeni bir fonksiyon oluşturun ve UnbindAction çağrısını yaparak 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ğlayın, böylece olay tetiklendiğinde fonksiyon çalışacaktır.
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ı onaylamak için oyun testini yapın. Araç giyildiğinde yeniden yükleme yapabilmeli, ancak aracı çıkardığınızda yapamamalısınız.
Yeniden yükleme animasyonunuz şimdi tamamlandı - ek bir zorluk olarak, blaster her ateşlendiğinde bir mühimmat sayacını geri saymayı deneyin. O zaman, silahın mermisi kalmadığında toolActivated fonksiyonunu devre dışı bırakabilir ve ardından yeniden yükleme animasyonu bitince tekrar etkinleştirebilirsiniz.