Memulai
Tutorial menengah

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 dengan aksi memberikan kontrol yang jauh lebih baik dan intuitif bagi pengguna terhadap fitur pengalaman Anda. Dalam tutorial ini, Anda akan mengikat aksi 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 pengalaman manapun. Untuk menambahkan model ke pengalaman Anda:

  1. Di browser, buka halaman model, klik tombol Dapatkan. Ini akan menambahkan model ke dalam inventaris Anda.
  2. Dari menu Window di Studio atau toolbar tab Home, buka Toolbox dan pilih tab Inventory.
  3. Pastikan dropdown berada di My Models.
  4. Pilih model Blaster untuk menambahkannya ke dalam pengalaman.

Buat pengendali aksi

Pertama, Anda perlu 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 aksi.


    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 tersebut, periksa apakah actionName yang diberikan cocok dengan nama aksi 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 lebih jelas ketika pengguna memuat ulang, ubah TextureId alat menjadi "rbxassetid://6593020923" untuk sesaat, lalu 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 aksi

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

  • Nama aksi.
  • Fungsi untuk menangani aksi (juga disebut "callback").
  • Apakah tombol layar sentuh harus ditampilkan.
  • Setiap jumlah Enum.KeyCodes untuk mendeteksi dan mengasosiasikannya dengan aksi.

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

  1. Ambil 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 masukkan argumen berikut:

    • Nama aksi (RELOAD_ACTION)
    • Pengendali aksi (onAction)
    • Sebuah nilai untuk membuat tombol sentuh (true)
    • Sebuah penekanan kunci 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 memperlengkapi alat dan menekan tombol R di keyboard Anda. Ikon ransel harus berubah sesaat menjadi simbol menunggu untuk memberi sinyal bahwa senjata sedang dimuat ulang:

Lepaskan aksi

Saat pengguna melepas alat, aksi perlu dilepaskan agar mereka tidak bisa memuat ulang tanpa alat yang diperlengkapi.

  1. Buat fungsi baru bernama toolUnequipped dan panggil UnbindAction, melampirkan nama aksi.


    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 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 semuanya berfungsi dengan benar. Anda seharusnya bisa memuat ulang saat alat diperlengkapi, tetapi tidak saat alat dilepas.

Animasi pemuatan ulang Anda sekarang lengkap - untuk tantangan ekstra, 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 pemuatan 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.