Mendeteksi Masukan Pengguna

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

Menghubungkan masukan pengguna ke tindakan memberi pengguna lebih banyak kendali intuitif atas fitur-fitur pengalaman Anda. Dalam tutorial ini, Anda akan menyambungkan tindakan reloading ke unittertentu.

Memulai

Pelajari cara menggunakan alat Blaster yang dibuat di Creating Player Tools. Anda dapat mengikuti instruksi tersebut untuk menciptakan alat atau Anda dapat mengunduh model Blaster dan menyisipkannya ke dalam 2> StarterPack2>.

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 Lihat dan klik Kotak Alat .
  3. Di jendela Toolbox, klik pada tombol Inventaris . Kemudian, pastikan tombol dropdown ada di Model Saya .
  4. Pilih model Blaster untuk menambahkannya ke pengalaman.

Membuat Penangani Tindakan

Pertama, Anda akan memerlukan fungsi untuk menangani ketika input pengguna terdeteksi.

  1. Buka ToolController LocalScript di dalam Blaster.

  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 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 aksi reload dan pastikan inputState adalah UserInputState.Begin (status awal). Ini penting karena fungsi akan berjalan setiap kali 2>inputState2> berubah, tetapi reload hanya perlu


    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 ini menjadi "rbxassetid://6593020923" untuk sementara waktu, dan kemudianubah kembali ke nilai aslinya dari "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 ikat fungsi ke input khusus dengan menggunakan fungsi BindAction, yang menerima beberapa argumen:

  • Nama action
  • Fungsi untuk menangani tindakan (juga disebut "CALLBACK")
  • Apakah tombol layar sentuh harus ditampilkan atau tidak
  • Jumlah apa pun dari Enum.KeyCodes untuk mendeteksi dan menghubungkan dengan action.

KodeKunci adalah nilai yang mewakili tombol masuk yang berbeda, seperti tombol keyboard atau tombol kontrol. Daftar lengkap kode tersedia here .

  1. Dapatkan ContextActionService di bagian atas script.


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

    • Nama aksi ( RELOAD_ACTION )
    • Pengelola aksi ( onAction )
    • Nilai untuk menciptakan tombol sentuh ( true )
    • Tombol penggeser 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. Test play dengan menggunakan alat ini dan menekan tombol R di keyboard Anda. Ikon ransel harus berubah sebentar ke simbol tunggu untuk menyinyal bahwa senjata sedang diperbarui:

Membatalkan Bind Aksi

Ketika pengguna melepaskan alat, tindakan harus menjadi tidak bergantung sehingga mereka tidak dapat memuat ulang tanpa alat yang dilengkapi.

  1. Buat fungsi baru bernama toolUnequipped dan panggil UnbindAction , melalui 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 akan berjalan saat acara menembak.


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

Animasi reloading Anda sekarang telah selesai - untuk tantangan tambahan, coba hitung mundur counter amunisi setiap kali peledakan diluncurkan. Anda kemudian dapat menonaktifkan fungsi toolActivated ketika peledakan tidak memiliki amunisi, lalu aktifkan kembali saat animasi reloading selesai.