Kullanıcı girişlerini eylemlere bağlayarak, kullanıcılar deneyiminizin özellikleri üzerinde çok daha iyi ve daha iyi bir kontrol sağlar. Bu öğretici içinde, bir yeniden yükleme eylemini belirli bir anahtara bağlayacaksınız.
Başlangıç
Bu öğretici, Oyuncu Araçları Oluşturma sayfasında oluşturulan Blaster aletini kullanır. Bu aleti oluşturmak için bu talimatları izleyebilirsiniz veya Blaster modelini indirebilir ve 2>StarterPack2> içine ekleyebilirsiniz.
Modelleri herhangi bir deneyim arasında kullanmak için Envanterinize ekleyebilirsiniz. Bir modeli deneyiminize eklemek için:
- Bir tarayıcıda, modeller sayfasını aç, al düğmesine tıkla. Bu, modeli envanterine ekler.
- Stüdyo'da Görüntü sekmesine gidin ve Araç Kutusu üzerine tıklayın.
- Araç Kutusu penceresinde, Envanter düğmesine tıklayın. Sonra, dropdown'ın My Models 'de olduğundan emin olun.
- Deneyime eklemek için Blaster modelini seçin.
Bir Eylem İşleyicisi Oluşturulması
İlk olarak, kullanıcı girişi tespit edildiğinde ele alacak bir işlev gerekecektir.
Blaster'ın içindeki AraçKontrolCisi LocalScriptyı açın.
aksiyoniçin bir isim depolamak 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 adında bir işlev oluşturur: actionName, inputState ve inputObject. Bu, kullanıcının girildiğinde çalışacak olan işlev olacaktır.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endİşlev içinde, verilen actionName 'in yeniden yükleme eylemiyle uyumlu olduğunu kontrol edin ve inputState 'in başlangıç durumu (başlangıç durumu) olduğundan emin olun. Bu önemlidir, çünkü işlev her defasında UserInputState.Begin değiştirse de, y
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendendKullanıcı yeniden yüklendiğinde açık hale getirmek için, araçlarınızın TextureId 'ini "rbxassetid://6593020923" ile değiştirin, ardından orijinal değerinin rbxassetid://92628145() olduğunu değişt
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 kullanılarak bir işlevi belirli bir girdiye bağlanabilir bağlayabilir kullanılarak kullanılır işlevi kullanılarak birkaç argüman kabul edilir:
- aksiyonadı
- Eylemi işleyen işlev (ayrıca bir "çağrılış" olarak da adlandırılır)
- Bir dokunmatik düğmesi gösterilmesi gerekir mi yoksa gösterilmez mi
- aksiyontespit ve eşleştirme için herhangi bir miktar Enum.KeyCodes .
KilitKodları, klavye tuşları veya kontrolör tuşları gibi farklı giriş butonlarını temsil eden değerlerdir. Ayrıntılı bir kod listesi için here .
ContextActionService iletişim kutusunun üstünde alın.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"toolEquipped işlevinin içinde, BindAction ı arayın ve aşağıdaki argelerden geçin:
- Eylemin adı ( RELOAD_ACTION )
- Eylem bağlayıcısı ( onAction )
- Bir dokunmatik düğme oluşturmak için bir değer ( true )
- Tespit etmek için bir tuşa 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ç takın ve R tuşuna basarak konsoldaki bekleyici sembolüne anında değiştirilir. Silah yeniden yükleniyor işaretini göstermek için anında bekleyici sembolüne değiştirilir:
Eylemin Bağlantısını Kaldırma
Kullanıcı aleti çıkarınca eşyayı bağlantısını kesmek olarak çıkarması gerekir, böylece alet takılmadan yeniden yüklemeyebilirler.
Eşyalendirilmemiş yeni bir işlev oluşturun ve toolUnequipped çağırın, eylem adını 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)Etkinleştirmeyi toolUnequipped etkinleştirme etkinliğine bağlayın, böylece etkinleştirme başarılı olduğunda işlev çalışı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)Herkesin doğru şekilde çalıştığından emin olmak için oyun testi yapın. Alet takıldığında yeniden yüklemeyi sağlayabilmelisiniz, ancak çıkarıldığında yeniden yüklemeyi sağlayabilmelisiniz.
Yeniden yükleme animasyonunuz artık tamamlandı - ekstra bir meydan okuma için, her blaster'ın ateşlendiğinde bir mermi sayacını saymayı deneyin. Sonra silahın mermisi yokken toolActivated işlevini devre dışı bırakabilirsiniz ve yeniden yükleme animasyonu bitenecek kadar devre edebilirsiniz.