Kullanıcı girişini algıla

*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ş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:

  1. Bir tarayıcıda, model sayfasını açın, Almak düğmesine tıklayın. Bu, modeli envanterinize ekler.
  2. Stüdyoda, Görüntüleme sekmesine gidin ve Araç çantasına tıklayın.
  3. Araç kutusu penceresinde, Envanter düğmesine tıklayın. Ardından, bırakıcının Modellerim üzerinde olduğundan emin olun.
  4. 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.

  1. Blaster'ın içinde Araç Kontrolörü LocalScript açın.

  2. aksiyoniçin bir isim saklamak 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 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.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. İş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 then
    end
    end
  5. Kullanı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 then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end

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 .

  1. Senaryonun üstünde ContextActionService alın.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. 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 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ç 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.

  1. 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()
    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. 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.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. 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.