Sistem Aksi Input

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

Sistem Aksi Input lintas platform Sistem Aksi Input memungkinkan Anda menghubungkan aksi dan mengatur pengikatan di berbagai input perangkat keras pada saat pengeditan. Digabungkan dengan konteks, Anda dapat dengan mudah mengonfigurasi dan mengedit sistem input modular yang berfungsi di perangkat mana pun dalam fase permainan apa pun. Kasus penggunaan termasuk:

  • Sistem penembak orang pertama dengan aksi yang secara dinamis berpindah masuk dan keluar tergantung pada apakah pemain berada dalam mode pertempuran atau mode pengamat.
  • Sistem berkendara yang komprehensif dilengkapi dengan akselerasi/deselerasi, pendorong mobil, dan stasiun pengisian bahan bakar.
  • Hotkey untuk sistem kemampuan dalam permainan pertarungan untuk mengganti gerakan dengan mulus tanpa pemain kehilangan pukulan.

Konteks input

InputContext adalah kumpulan aksi yang menyimpan aksi input terkait, misalnya PlayContext untuk kontrol karakter dalam permainan dan NavContext untuk kontrol menavigasi menu UI. Anda dapat mengaktifkan/mematikan konteks (dan aksi terkaitnya) melalui properti Enabled mereka, seperti mengaktifkan NavContext saat menu inventaris terbuka dan kemudian beralih ke PlayContext saat pemain menutup menu dan kembali ke permainan utama.

Bahkan jika sebuah permainan mungkin tidak menggunakan beberapa konteks input pada awalnya, disarankan untuk membuat konteks utama di tingkat atas dari sistem input mana pun, misalnya instance PlayContext untuk input yang terjadi selama permainan.

  1. RECOMMENDED
    Buat Folder bernama Inputs di dalam ReplicatedStorage untuk menyimpan berbagai konteks input.

    Folder Baru di dalam ReplicatedStorage, dinamai Inputs
  2. Masukkan InputContext baru ke dalam folder dan ganti namanya menjadi PlayContext.

    Instance InputContext Baru di dalam ReplicatedStorage, dinamai PlayContext
  3. OPTIONAL
    Di jendela Properties, atur Priority ke 2000 dan aktifkan Sink. Sebuah konteks dengan Sink yang diaktifkan mengkonsumsi peristiwa input untuk KeyCodes yang terikat pada tingkat prioritasnya, memblokir input tersebut agar tidak mencapai konteks dengan prioritas lebih rendah. Ini praktis untuk kasus penggunaan seperti layar inventaris yang harus menekan input permainan tertentu saat terbuka. Dalam contoh ini, PlayContext diberikan Priority yang cukup tinggi untuk menyerap input yang terikat sebelum konteks PlayerScripts default memprosesnya.

    InputContext dengan Prioritas diatur ke 2000 dan Sink diaktifkan

Aksi input

InputAction mendefinisikan mekanik aksi permainan seperti "Lompat," "Lari," atau "Tembak." Aksi ini kemudian dipetakan ke input perangkat keras menggunakan pengikatan input.

InputAction dapat memiliki beberapa variasi tergantung pada properti Type-nya (Enum.InputActionType). Defaultnya adalah Bool, dirancang untuk menerima nilai true/false dari tekan/lepaskan input seperti ButtonA, E, atau MouseLeftButton.

Jenis Aksi InputContoh Penggunaan
BoolAksi yang dipicu seperti lompat, tembak, lari, dll. dengan dukungan untuk ambang tekan/lepaskan pada input analog.
Direction1DAksi variabel dari nol hingga penuh seperti pedal akselerator mobil atau tingkat zoom scope pandang.
Direction2DGerakan arah 2D seperti rotasi kamera, atau gerakan karakter Roblox standar.
Direction3DGerakan arah 3D seperti kendaraan terbang yang dapat melayang naik/turun, akselerasi/deselerasi, dan melayang kiri/kanan.
ViewportPositionKoordinat viewport 2D seperti input mouse, seperti untuk kursor kustom atau raycasting untuk memilih objek dunia.

Untuk menguji InputAction untuk lari karakter yang sederhana:

  1. RECOMMENDED
    Pilih objek Workspace tingkat atas di Explorer dan kemudian, di jendela Properties, atur properti PlayerScriptsUseInputActionSystem ke Enabled.

  2. Buat InputAction baru di dalam konteks PlayContext di dalam ReplicatedStorage. Ganti namanya menjadi CharacterSprint untuk menunjukkan aksi yang didedikasikan.

    Instance InputAction Baru di dalam InputContext, dinamai CharacterSprint
  3. Di jendela Properties, perhatikan bahwa Type aksi adalah Bool (default). Ini adalah tipe logis untuk lari karakter sederhana sebagai aksi boolean true/false (karakter sedang berlari atau tidak berlari).

    Properti Type dari InputAction diatur ke Bool

Pengikatan input

InputBinding mendefinisikan pengikatan perangkat keras mana yang harus memicu InputAction induknya, misalnya tekan tombol, tombol gamepad, atau ketukan pada perangkat yang mendukung sentuhan. Untuk kompatibilitas lintas platform, setiap InputAction harus memiliki InputBinding untuk gamepad, keyboard/mouse, dan sentuh seperti yang diilustrasikan di sini.

Roblox menyediakan pengikatan input default untuk gerakan, kontrol kamera, dan interaksi dasar dengan lingkungan — pemain Roblox sudah akrab dengan kontrol ini, jadi Anda hanya boleh mengubahnya dalam kasus tertentu. Juga perlu dicatat bahwa input terkendali tidak dapat diubah dan akan selalu beroperasi sesuai tujuan yang dimaksud.

TindakanMouse/KunciGamepadSentuh
Buka menu RobloxEscStart tombol (ButtonStart)N/A
Konsol PengembangF9N/AN/A
Mode layar penuh (Windows)
Tampilkan desktop (Mac)
F11N/AN/A
Rekam video (Windows)F12N/AN/A
Ambil screenshotPrintScreenN/AN/A

Type yang ditetapkan pada InputAction induk secara langsung mempengaruhi jenis input umum mana (kunci/tombol/ketik, pemicu analog, thumbstick, dll.) yang valid untuk instance InputBinding anak. Selanjutnya, nilai yang dikirim ke peristiwa yang terhubung dengan aksi induk tergantung pada jenis input yang dipilih dari pengikatan. Lihat peristiwa input untuk detail tentang korelasi antara jenis aksi, pengikatan, dan nilai kembali.

Untuk menghubungkan pengikatan untuk lari karakter yang sederhana:

  1. Masukkan InputBinding baru ke dalam aksi CharacterSprint dan ganti namanya menjadi KeyboardBinding. Kemudian atur properti KeyCode pengikatan ke LeftShift.

  2. Masukkan InputBinding kedua ke dalam aksi CharacterSprint dan ganti namanya menjadi GamepadBinding. Kemudian atur properti KeyCode pengikatan ke ButtonY.

  3. Di dalam kontainer ScreenGui di dalam StarterGui, buat tombol di layar, ganti namanya menjadi SprintButton, dan posisikan/ubah ukuran sesuai keinginan.

  4. Masukkan InputBinding ketiga ke dalam aksi CharacterSprint dan ganti namanya menjadi TouchBinding. Kemudian, di jendela Properties, tautkan properti UIButton pengikatan ke tombol SprintButton yang Anda buat sebelumnya di dalam StarterGui.

Peristiwa input

Instance InputAction memiliki tiga peristiwa bawaan untuk menangani input pemain yang berasal dari InputBindings.

  • Pressed — Peristiwa ini hanya terjadi ketika Type dari aksi input diatur ke Bool, dan hanya ketika status bertransisi dari false ke true.
  • Released — Peristiwa ini hanya terjadi ketika Type dari aksi input diatur ke Bool, dan hanya ketika status bertransisi dari true ke false.
  • StateChanged — Peristiwa ini terjadi untuk semua jenis aksi input setiap kali status berubah, kecuali jika status mencoba bertransisi ke status yang sama.

Tergantung pada Type dari aksi input (Bool, Direction1D, Direction2D, Direction3D, atau ViewportPosition) dan jenis input umum yang berasal dari InputBinding anak (kunci/tombol/ketik, pemicu analog, thumbstick, dll.), nilai yang berbeda dikembalikan ke pengendali peristiwa Pressed, Released, dan StateChanged. Periksa tabel berikut untuk memahami korelasi dengan lebih baik.

Tipe Bool paling baik untuk aksi yang dipicu seperti lompat, tembak, lari, dll. dengan dukungan untuk ambang tekan/lepaskan pada input analog.

Jenis Input Valid pada InputBindingsDikembalikan ke Peristiwa InputAction
Input boolean dari kunci keyboard atau tombol mouse/gamepad dasar melalui properti KeyCode pengikatan, atau tekan/lepaskan GuiButton melalui properti UIButton pengikatan.
Jumlah input variabel dari input analog seperti pemicu gamepad (ButtonL2/ButtonR2) melalui properti KeyCode pengikatan.

Untuk menghubungkan peristiwa untuk lari karakter yang sederhana:

  1. Masukkan Script baru ke dalam pohon CharacterSprint, di samping berbagai pengikatan input. Kemudian atur RunContext ke Client dan ganti namanya menjadi OnActivate.

  2. Tempelkan kode berikut ke dalam skrip OnActivate. Perhatikan koneksi peristiwa Pressed pada baris 1315 yang menggandakan kecepatan berjalan karakter saat pengikatan input lari ditekan, dan koneksi peristiwa Released yang sesuai pada baris 1618 yang mengatur ulang kecepatan berjalan ke default saat pengikatan input lari dilepaskan.

    OnActivate (Skrip Klien)
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
  3. Uji permainan Anda dan uji aksi lari karakter dengan pengikatan yang Anda pilih sebelumnya: LeftShift untuk keyboard, ButtonY untuk gamepad, dan tombol di layar SprintButton untuk perangkat yang mendukung sentuhan. Ingat bahwa Anda dapat menggunakan Emulator Kontroler untuk menguji input gamepad langsung di Roblox Studio.

Perubahan konteks

Setelah Anda memiliki konteks input seperti PlayContext, Anda dapat mengaktifkan/mematikan selama permainan melalui skrip, mengubah Priority untuk menentukan aksi mana yang memiliki prioritas lebih tinggi, dan Sink input agar tidak diproses dalam konteks dengan prioritas lebih rendah.

  1. Untuk memudahkan beralih konteks dari skrip lain, masukkan BindableEvent baru ke dalam folder input Anda di dalam ReplicatedStorage dan ganti namanya menjadi ContextEvent.

  2. Buat Script baru pada tingkat yang sama, atur RunContext ke Client, dan ganti namanya menjadi UpdateContext.

  3. Di dalam skrip UpdateContext, tempelkan kode berikut:

    UpdateContext (Skrip Klien)
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    -- Hubungkan peristiwa yang dapat diikat
    contextEvent.Event:Connect(function(targetContext, enabled)
    local context = inputsFolder:FindFirstChild(targetContext)
    if context then
    context.Enabled = enabled
    print(context.Name .. ": " .. tostring(context.Enabled))
    else
    warn("InputContext tidak ditemukan!")
    end
    end)
  4. Dengan skrip UpdateContext di tempat, Anda sekarang dapat memperbarui InputContext yang dinamai dengan memicu peristiwa yang dapat diikat, misalnya dari LocalScript yang menggerakkan GuiButton di dalam kontainer ScreenGui.

    Skrip Tombol
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    local button = script.Parent
    button.Activated:Connect(function()
    -- Memicu peristiwa yang dapat diikat dengan konteks input target dan status diaktifkan
    contextEvent:Fire("PlayContext", true)
    end)

Manajer Aksi Input

Alat Manajer Aksi Input adalah antarmuka gaya matriks yang terpadu untuk merancang, mengaudit, dan menskalakan arsitektur input Anda.

Untuk mengaksesnya, navigasikan ke menu Window di Studio dan pilih Input ⟩ Manajer Aksi Input. Jika permainan Anda sudah menggunakan konteks, aksi, atau pengikatan input, manajer akan secara otomatis memindai DataModel dan mengekstrak instance yang ada ke dalam grid editor. Setiap instance terkait input baru akan secara otomatis terisi ke dalam folder Inputs di dalam ReplicatedStorage.

Folder di dalam ReplicatedStorage bernama Inputs

Untuk mengonfigurasi pengaturan input untuk lari karakter seperti yang dijelaskan dalam bagian di atas:

  1. RECOMMENDED
    Pilih objek Workspace tingkat atas di Explorer dan kemudian, di jendela Properties, atur properti PlayerScriptsUseInputActionSystem ke Enabled.

  2. Di dalam kontainer ScreenGui di dalam StarterGui, buat tombol di layar, ganti namanya menjadi SprintButton, dan posisikan/ubah ukuran sesuai keinginan.

  3. Di Manajer Aksi Input, arahkan mouse ke header kolom Konteks dan klik tombol . Masukkan nama yang sesuai untuk konteks baru seperti PlayContext dan tekan Enter. Sebuah InputContext dengan nama yang cocok muncul di ReplicatedStorage.

    Instance InputContext Baru di dalam ReplicatedStorage bernama PlayContext
  4. Arahkan mouse ke konteks baru dan klik tombol . Dari menu pop-up, pilih Bool, masukkan CharacterSprint untuk nama aksi, dan tekan Enter. Sebuah InputAction dengan nama yang cocok muncul di bawah konteks.

    Instance InputAction Baru di dalam InputContext bernama CharacterSprint
  5. Di baris CharacterSprint baru, tetapkan pengikatan untuk setiap jenis input:

    1. Keyboard dan Mouse — Klik tombol panah dan pilih LeftShift dari menu pemilih.
    2. Sentuh — Klik sel dan kemudian, di hierarki Explorer, klik objek SprintButton yang sebelumnya Anda masukkan ke dalam ScreenGui.
    3. Gamepad — Klik tombol panah dan pilih ButtonY dari menu pemilih.
  6. Masukkan Script baru ke dalam pohon CharacterSprint, di samping berbagai pengikatan input. Kemudian atur RunContext ke Client dan ganti namanya menjadi OnActivate.

  7. Tempelkan kode berikut ke dalam skrip OnActivate. Perhatikan koneksi peristiwa Pressed pada baris 1315 yang menggandakan kecepatan berjalan karakter saat pengikatan input lari ditekan, dan koneksi peristiwa Released yang sesuai pada baris 1618 yang mengatur ulang kecepatan berjalan ke default saat pengikatan input lari dilepaskan.

    OnActivate (Skrip Klien)
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.