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.
- RECOMMENDEDBuat Folder bernama Inputs di dalam ReplicatedStorage untuk menyimpan berbagai konteks input.

Masukkan InputContext baru ke dalam folder dan ganti namanya menjadi PlayContext.

- OPTIONALDi 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.

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 Input | Contoh Penggunaan |
|---|---|
| Bool | Aksi yang dipicu seperti lompat, tembak, lari, dll. dengan dukungan untuk ambang tekan/lepaskan pada input analog. |
| Direction1D | Aksi variabel dari nol hingga penuh seperti pedal akselerator mobil atau tingkat zoom scope pandang. |
| Direction2D | Gerakan arah 2D seperti rotasi kamera, atau gerakan karakter Roblox standar. |
| Direction3D | Gerakan arah 3D seperti kendaraan terbang yang dapat melayang naik/turun, akselerasi/deselerasi, dan melayang kiri/kanan. |
| ViewportPosition | Koordinat viewport 2D seperti input mouse, seperti untuk kursor kustom atau raycasting untuk memilih objek dunia. |
Untuk menguji InputAction untuk lari karakter yang sederhana:
- RECOMMENDEDPilih objek Workspace tingkat atas di Explorer dan kemudian, di jendela Properties, atur properti PlayerScriptsUseInputActionSystem ke Enabled.
Buat InputAction baru di dalam konteks PlayContext di dalam ReplicatedStorage. Ganti namanya menjadi CharacterSprint untuk menunjukkan aksi yang didedikasikan.

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).

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.
| Tindakan | Mouse/Kunci | Gamepad | Sentuh |
|---|---|---|---|
| Buka menu Roblox | Esc | Start tombol (ButtonStart) | N/A |
| Konsol Pengembang | F9 | N/A | N/A |
| Mode layar penuh (Windows) Tampilkan desktop (Mac) | F11 | N/A | N/A |
| Rekam video (Windows) | F12 | N/A | N/A |
| Ambil screenshot | PrintScreen | N/A | N/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:
Masukkan InputBinding baru ke dalam aksi CharacterSprint dan ganti namanya menjadi KeyboardBinding. Kemudian atur properti KeyCode pengikatan ke LeftShift.


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


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


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.
- 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 InputBindings | Dikembalikan 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:
Masukkan Script baru ke dalam pohon CharacterSprint, di samping berbagai pengikatan input. Kemudian atur RunContext ke Client dan ganti namanya menjadi OnActivate.

Tempelkan kode berikut ke dalam skrip OnActivate. Perhatikan koneksi peristiwa Pressed pada baris 13‑15 yang menggandakan kecepatan berjalan karakter saat pengikatan input lari ditekan, dan koneksi peristiwa Released yang sesuai pada baris 16‑18 yang mengatur ulang kecepatan berjalan ke default saat pengikatan input lari dilepaskan.
OnActivate (Skrip Klien)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)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.
Untuk memudahkan beralih konteks dari skrip lain, masukkan BindableEvent baru ke dalam folder input Anda di dalam ReplicatedStorage dan ganti namanya menjadi ContextEvent.

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

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 diikatcontextEvent.Event:Connect(function(targetContext, enabled)local context = inputsFolder:FindFirstChild(targetContext)if context thencontext.Enabled = enabledprint(context.Name .. ": " .. tostring(context.Enabled))elsewarn("InputContext tidak ditemukan!")endend)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 Tombollocal ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")local button = script.Parentbutton.Activated:Connect(function()-- Memicu peristiwa yang dapat diikat dengan konteks input target dan status diaktifkancontextEvent: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.

Untuk mengonfigurasi pengaturan input untuk lari karakter seperti yang dijelaskan dalam bagian di atas:
- RECOMMENDEDPilih objek Workspace tingkat atas di Explorer dan kemudian, di jendela Properties, atur properti PlayerScriptsUseInputActionSystem ke Enabled.
Di dalam kontainer ScreenGui di dalam StarterGui, buat tombol di layar, ganti namanya menjadi SprintButton, dan posisikan/ubah ukuran sesuai keinginan.

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.


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.


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

Tempelkan kode berikut ke dalam skrip OnActivate. Perhatikan koneksi peristiwa Pressed pada baris 13‑15 yang menggandakan kecepatan berjalan karakter saat pengikatan input lari ditekan, dan koneksi peristiwa Released yang sesuai pada baris 16‑18 yang mengatur ulang kecepatan berjalan ke default saat pengikatan input lari dilepaskan.
OnActivate (Skrip Klien)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)
