Kullanıcı girişini eylemlere bağlamak, kullanıcılara deneyimin özellikleri üzerinde çok daha iyi ve daha anlaşılır bir kontrol sağlar.Bu eğitimde, yeniden yükleme eylemini belirli bir anahtara bağlayacaksınız.
Başlayın
Bu öğretici, Yarışçı aracını kullanır, Oyuncu Araçları Oluşturma sırasında oluşturulan.Araç oluşturmak için bu talimatları izleyebilir veya Patlayıcı modelini indirip BaşlangıçPaketi içine ekleyebilirsiniz.
Modeller, herhangi bir deneyim arasında kullanılmak üzere envanterinize eklenebilir. Bir modeli deneyiminize eklemek için:
- Bir tarayıcıda, model sayfasını açın, Almak düğmesine tıklayın. Bu, modeli envanterinize ekler.
- Stüdyoda, Görüntüleme sekmesine gidin ve Araç çantasına tıklayın.
- Araç kutusu penceresinde, Envanter düğmesine tıklayın. Ardından, bırakıcının Modellerim üzerinde olduğundan emin olun.
- Deneyime eklemek için Patlayıcı modelini seçin.
Bir eylem işleyicisi oluştur
Öncelikle, kullanıcı girişi tespit edildiğinde başa çıkmak için bir işleve ihtiyacınız olacak.
Blaster'ın içinde Araç Kontrolörü LocalScript açın.
aksiyoniçin bir isim saklamak için 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)Üç argüman alan onAction adlı bir işlev oluşturun: actionName , inputState ve inputObject.Kullanıcı girişi tespit edildiğinde çalışacak işlev bu olacaktır.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endİşlevin içinde, verilen actionName 'nin yeniden yükleme eylem adına eşleştiğini ve inputState 'nin UserInputState.Begin (başlangıç durumu) olduğundan emin olun.Bu önemlidir çünkü işlev her değişiklikte inputState çalışacaktır, ancak yeniden yüklemenin sadece bir kez gerçekleşmesi gerekir.
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendendKullanıcı yeniden yüklendiğinde bunu açıkça göstermek için, aracın TextureId kısmını bir an için "rbxassetid://6593020923" 'ye değiştirin ve ardından orijinal değerine "rbxassetid://92628145" 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 aksiyon
ContextActionService bir işlevi belirli bir girişe bağlamak için bind kullanarak BindAction işlevi, birkaç argümanı kabul eden kullanılabilir:
- aksiyonadı
- Eylemi ele alan işlev (ayrıca "çağrı" olarak adlandırılır)
- Dokunmatik düğme görüntülenmeli mi yoksa görüntülenmez mi
- aksiyontespit etmek ve ilişkilendirmek için herhangi bir miktar Enum.KeyCodes .
Anahtar kodlar, klavye tuşları veya kontrolör düğmeleri gibi farklı giriş düğmelerini temsil eden değerlerdir.Tam bir kod listesi mevcut here .
Senaryonun üstünde ContextActionService alın.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"toolEquipped işlevinin içinde, BindAction 'i arayın ve aşağıdaki argümanları geçin:
- Eylemin adı ( RELOAD_ACTION )
- Eylem işlemcisi ( onAction )
- Dokunma düğmesi oluşturmak için bir değer ( true )
- Tespit etmek 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()endAraç donatılarak ve klavyede R tuşuna basarak oyun testi yapın.Sırt çantası simgesi, silahın yeniden yüklendiğini bildirmek için geçici olarak bir bekleme sembolüne dönüşmelidir:
Eylemi aksiyon
Kullanıcı aracı çıkardığında, eylem aksiyonunun bağlantı kesilmiş olması gerekir, böylece alet donatılmadan yeniden yüklenemezler.
Yeni bir işlev oluştur toolUnequipped ve çağır UnbindAction , eylem adından geçerek.
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 etkinliğine bağlayın, böylece fonksiyon etkinlik ateşlendiğinde ç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 testi yapın. Araç donatıldığında yeniden yükleyebilmelisiniz, ancak donatılmadığında değil.
Yeniden yükleme animasyonunuz artık tamamlandı - ek bir meydan okuma için, patlayıcı ateşlendiğinde her seferinde bir mühimmat sayacı saymayı deneyin.Silahın cephane olmadığında toolActivated fonksiyonunu devre dışı bırakabilir ve yeniden yükleme animasyonu bitince yeniden etkinleştirebilirsiniz.