Kullanıcının Girdiğini Tespit Etme

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

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:

  1. Bir tarayıcıda, modeller sayfasını aç, al düğmesine tıkla. Bu, modeli envanterine ekler.
  2. Stüdyo'da Görüntü sekmesine gidin ve Araç Kutusu üzerine tıklayın.
  3. Araç Kutusu penceresinde, Envanter düğmesine tıklayın. Sonra, dropdown'ın My Models 'de olduğundan emin olun.
  4. 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.

  1. Blaster'ın içindeki AraçKontrolCisi LocalScriptyı açın.

  2. aksiyoniçin bir isim depolamak için bir değişken oluşturun.


    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  3. Üç 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.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. İş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 then
    end
    end
  5. Kullanı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 then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end

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 .

  1. ContextActionService iletişim kutusunun üstünde alın.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. 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 then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
  3. Araç 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.

  1. 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()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  2. 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.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Unequipped:Connect(toolUnequipped)
    tool.Activated:Connect(toolActivated)
  3. 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.