Deteksi input pengguna

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

Menghubungkan input pengguna ke tindakan memberikan kontrol yang jauh lebih baik dan lebih intuitif atas fitur-fitur permainan Anda. Dalam tutorial ini, Anda akan mengikat tindakan memuat ulang ke tombol tertentu.

Memulai

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

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

  1. Di browser, buka halaman model, klik tombol Dapatkan. Ini menambahkan model ke dalam inventaris Anda.
  2. Dari menu Jendela Studio atau toolbar tab Beranda, buka Toolbox dan pilih tab Inventaris.
  3. Pastikan dropdown berada di Model Saya.
  4. Pilih model Blaster untuk menambahkannya ke dalam permainan.

Buat pengendali tindakan

Pertama, Anda perlu sebuah fungsi untuk menangani ketika input pengguna terdeteksi.

  1. Buka LocalScript ToolController di dalam Blaster.

    Tampilan Explorer di mana skrip ToolController di dalam alat Blaster dipilih

  2. Buat variabel untuk menyimpan nama untuk tindakan.

    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 ketika 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 actionName yang diberikan cocok dengan nama tindakan memuat ulang dan pastikan inputState adalah UserInputState.Begin (status awal). Ini penting karena fungsi akan dijalankan setiap kali inputState berubah, tetapi memuat ulang 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, dan kemudian ubah kembali ke nilai aslinya yaitu "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

Ikat tindakan

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

  • Nama tindakan.
  • Fungsi untuk menangani tindakan (juga disebut "callback").
  • Apakah tombol layar sentuh harus ditampilkan atau tidak.
  • Jumlah Enum.KeyCodes untuk mendeteksi dan mengasosiasikannya dengan tindakan.

KeyCodes adalah nilai yang mewakili tombol input yang berbeda, seperti tombol keyboard atau tombol pengontrol. Daftar lengkap kode tersedia di sini.

  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 lewati argumen berikut:

    • Nama tindakan (RELOAD_ACTION)
    • Pengendali tindakan (onAction)
    • Sebuah nilai untuk membuat tombol sentuh (true)
    • Sebuah penekanan 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. Uji coba dengan mengenakan alat dan menekan tombol R di keyboard Anda. Ikon ransel harus berubah sesaat menjadi simbol menunggu untuk menandakan bahwa senjata sedang memuat ulang:

Lepaskan tindakan

Ketika pengguna melepas alat, tindakan perlu dilepaskan sehingga mereka tidak dapat memuat ulang tanpa alat yang dikenakan.

  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 acara Unequipped sehingga fungsi akan dijalankan ketika 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. Uji coba untuk memastikan bahwa semuanya berfungsi dengan benar. Anda seharusnya dapat memuat ulang ketika alat dikenakan, tetapi tidak ketika alat dilepas.

Animasi memuat ulang Anda sekarang sudah lengkap - untuk tantangan tambahan, coba hitung mundur penghitung amunisi setiap kali blaster ditembakkan. Anda kemudian dapat menonaktifkan fungsi toolActivated ketika senjata tidak memiliki amunisi, lalu mengaktifkannya kembali setelah animasi memuat ulang selesai.

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.