Deteksi input pengguna

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Menyambungkan input pengguna ke tindakan memberi pengguna kontrol yang lebih baik dan lebih intuitif atas fitur pengalaman Anda.Dalam tutorial ini, Anda akan mengikat tindakan pengisian ulang ke unittertentu.

Mulai

Tutorial ini menggunakan alat Blaster yang dibuat di Buat Alat Pemain.Anda dapat mengikuti instruksi untuk membuat alat atau Anda dapat mengunduh model Blaster dan menyisipkannya ke StarterPack .

Model dapat ditambahkan ke Inventaris Anda untuk digunakan di antara pengalaman apa pun. Untuk menambahkan model ke pengalaman Anda:

  1. Di browser, buka halaman model, klik tombol Dapatkan . Ini menambahkan model ke inventaris Anda.
  2. Di Studio, pergi ke tab Tampilan dan klik pada Toolbox .
  3. Di jendela Toolbox, klik tombol Inventaris . Kemudian, pastikan dropdown berada di Model Saya .
  4. Pilih model Peredam untuk menambahkannya ke dalam pengalaman.

Buat pengelola tindakan

Pertama, Anda akan membutuhkan fungsi untuk ditangani saat input pengguna terdeteksi.

  1. Buka Kontroler Alat LocalScript.

  2. Buat variabel untuk menyimpan nama untuk action.


    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. Buat fungsi bernama onAction yang menerima tiga argumen: actionName , inputState , dan inputObject .Ini akan menjadi fungsi yang dijalankan saat input pengguna terdeteksi.


    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. Di dalam fungsi, periksa bahwa yang diberikan actionName sesuai dengan nama tindakan reload dan pastikan inputState adalah UserInputState.Begin (status awal).Ini penting karena fungsi akan berjalan setiap kali ada perubahan inputState, tetapi reload hanya perlu terjadi sekali.


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. Untuk membuatnya jelas ketika pengguna memuat ulang, ubah TextureId dari alat menjadi "rbxassetid://6593020923" untuk sesaat, lalu ubah kembali ke nilai aslinya "rbxassetid://92628145".


    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

Ikatkan action

ContextActionService dapat digunakan untuk mengikat fungsi ke input spesifik dengan menggunakan fungsi BindAction, yang menerima beberapa argumen:

  • Nama action
  • Fungsi untuk menangani tindakan (juga disebut " callback")
  • Apakah tombol touchscreen harus ditampilkan atau tidak
  • Jumlah berapa pun dari Enum.KeyCodes untuk mendeteksi dan berhubungan dengan action.

Kode Kunci adalah nilai yang mewakili berbagai tombol input, seperti tombol keyboard atau tombol kontroler.Daftar kode lengkap tersedia here .

  1. Dapatkan ContextActionService di bagian atas skrip.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. Di dalam fungsi toolEquipped, panggil BindAction dan lulus melalui argumen berikut:

    • Nama tindakan ( RELOAD_ACTION )
    • Pengelola tindakan ( onAction )
    • Nilai untuk membuat tombol sentuh ( true )
    • Tekan tombol untuk mendeteksi ( 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. Tes uji dengan memperlengkapi alat dan menekan tombol R pada keyboard Anda.Ikon ransel harus sesaat berubah menjadi simbol tunggu untuk menandakan bahwa senjata sedang diisi ulang:

Hapuskan action

Ketika pengguna melepaskan alat, tindakan perlu menjadi tidak terikat sehingga mereka tidak dapat memuat ulang tanpa alat dilengkapi.

  1. Buat fungsi baru bernama toolUnequipped dan panggil UnbindAction , melewati nama tindakan.


    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. Hubungkan fungsi toolUnequipped ke fungsi Unequipped untuk acara sehingga fungsi akan berjalan saat acara terjadi.


    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. Tes uji untuk mengkonfirmasi bahwa semuanya berfungsi dengan benar. Anda harus dapat memuat ulang saat alat dilengkapi, tetapi tidak saat tidak dilengkapi.

Animasi reload ulang Anda sekarang selesai - untuk tantangan ekstra, coba hitung mundur penghitung amunisi setiap kali peledak ditembak.Anda kemudian dapat menonaktifkan fungsi toolActivated ketika senjata tidak memiliki amunisi, lalu aktifkan kembali setelah animasi reload selesai.