Sistem Aksi Input lintas platform Sistem Aksi Input memungkinkan Anda menghubungkan aksi dan mengatur binding 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 mana pun. Contoh penggunaan termasuk:
- Sistem tembak-menembak orang pertama dengan aksi yang secara dinamis berpindah masuk dan keluar tergantung pada apakah pemain berada dalam mode pertempuran atau mode penonton.
- Sistem berkendara komprehensif dilengkapi dengan akselerasi/deselerasi, pendorong mobil, dan stasiun pengisian bahan bakar.
- Hotkey untuk sistem kemampuan dalam permainan pertarungan untuk menukar gerakan dengan mulus tanpa pemain melewatkan pukulan.
Konteks input
Sebuah InputContext adalah kumpulan aksi yang menyimpan aksi input yang terkait, misalnya PlayContext untuk kontrol karakter dalam permainan dan NavContext untuk kontrol menavigasi di menu UI. Anda dapat mengaktifkan/mematikan konteks (dan aksi terkaitnya) melalui properti Enabled mereka, seperti untuk mengaktifkan NavContext ketika menu inventaris terbuka dan kemudian beralih ke PlayContext ketika pemain menutup menu dan kembali ke permainan utama.
Bahkan jika sebuah permainan mungkin tidak menggunakan banyak 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.
- DIANJURKANBuat Folder bernama Inputs di dalam ReplicatedStorage untuk menyimpan berbagai konteks input.

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

Di jendela Properties, atur Priority ke 2000 dan aktifkan Sink. Sebuah konteks dengan Sink yang diaktifkan menghabiskan peristiwa input untuk KeyCodes yang terikat padanya pada tingkat prioritasnya, memblokir input tersebut dari mencapai konteks dengan prioritas lebih rendah. Ini praktis untuk digunakan dalam kasus 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
Sebuah InputAction mendefinisikan mekanik aksi permainan seperti "Loncat," "Lari," atau "Tembak." Aksi ini kemudian dipetakan ke input perangkat keras menggunakan binding input.
Sebuah InputAction dapat memiliki beberapa variasi tergantung pada properti Type-nya (Enum.InputActionType). Default-nya adalah Bool, dirancang untuk menerima nilai true/false dari penekanan/pelepasan input seperti ButtonA, E, atau MouseLeftButton.
| Type Aksi Input | Contoh Penggunaan |
|---|---|
| Bool | Aksi yang dipicu seperti loncat, tembak, lari, dll. dengan dukungan untuk ambang tombol ditekan/dilepaskan pada input analog. |
| Direction1D | Aksi berkisar dari nol hingga penuh seperti pedal akselerator mobil atau tingkat zoom pada skop pandang. |
| Direction2D | Gerakan arah 2D seperti rotasi kamera, atau gerakan karakter Roblox standar. |
| Direction3D | Gerakan arah 3D seperti kendaraan yang bisa melayang naik/turun, mempercepat/deselerasi, dan meluncur ke kiri/kanan. |
| ViewportPosition | Kooridnat viewport 2D seperti input mouse, seperti untuk kursor kustom atau raycasting untuk memilih objek dunia. |
Untuk menguji InputAction untuk sprinting karakter sederhana:
Buat InputAction baru di dalam konteks PlayContext di dalam ReplicatedStorage. Ganti namanya menjadi CharacterSprint untuk menunjukkan aksinya yang khusus.

Di jendela Properties, perhatikan bahwa Type aksi ini adalah Bool (default). Ini adalah tipe logis untuk sprinting karakter sederhana sebagai aksi boolean true/false (karakter sedang sprinting atau tidak).

Binding input
Sebuah InputBinding mendefinisikan binding perangkat keras mana yang harus memicu InputAction induknya, misalnya penekanan tombol, tombol gamepad, atau ketukan pada perangkat yang mendukung sentuhan. Untuk kompatibilitas lintas platform, setiap InputAction harus memiliki InputBinding untuk gamepad, keyboard/mouse, dan touch seperti yang diilustrasikan di sini.

Type yang ditugaskan ke InputAction induk secara langsung memengaruhi jenis input umum mana (tombol/tekan, pemicu analog, thumbstick, dll.) yang valid untuk instansi InputBinding anak. Pada gilirannya, nilai yang dikirim ke acara yang terhubung dengan aksi induk tergantung pada jenis input yang dipilih pada binding. Lihat peristiwa input untuk detail tentang korelasi antara jenis aksi, binding, dan nilai pengembalian.
Untuk menghubungkan binding untuk sprinting karakter sederhana:
Masukkan InputBinding baru ke dalam aksi CharacterSprint dan ganti namanya menjadi KeyboardBinding. Kemudian atur properti KeyCode dari binding ke LeftShift.


Untuk memastikan kunci mouse Shift-kunci tidak mengganggu binding tombol, pilih StarterPlayer di Explorer dan nonaktifkan EnableMouseLockOption di jendela Properties.


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


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


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


Peristiwa input
Instansi InputAction memiliki tiga peristiwa bawaan untuk menangani input pemain yang berasal dari InputBindings.
- StateChanged — Peristiwa ini terjadi untuk semua jenis aksi input setiap kali keadaan berubah, kecuali jika keadaan mencoba untuk bertransisi ke keadaan yang sama.
Tergantung pada Type aksi input (Bool, Direction1D, Direction2D, Direction3D, atau ViewportPosition) dan jenis input umum yang berasal dari InputBinding anak (tombol/tekan, 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 digunakan untuk aksi pemicu seperti loncat, tembak, lari, dll. dengan dukungan untuk ambang tekan/lepaskan pada input analog.
| Jenis Input Valid pada InputBindings | Dikembalikan ke InputAction Event(s) |
|---|---|
| Input boolean dari kunci keyboard atau tombol mouse/gamepad dasar melalui properti KeyCode dari binding, atau tekan/lepaskan pada GuiButton melalui properti UIButton dari binding. |
|
| Jumlah input variabel dari input analog seperti pemicu gamepad (ButtonL2/ButtonR2) melalui properti KeyCode dari binding. |
|
Untuk menghubungkan peristiwa untuk sprinting karakter sederhana:
Masukkan Script baru ke dalam pohon CharacterSprint, di samping berbagai binding input. Kemudian atur RunContext ke Client dan ganti namanya menjadi OnActivate.

Tempelkan kode berikut ke dalam skrip OnActivate. Perhatikan koneksi peristiwa Pressed di baris 13‑15 yang menggandakan kecepatan jalan karakter ketika binding input sprint ditekan, dan koneksi peristiwa Released yang sesuai di baris 16‑18 yang mengatur ulang kecepatan jalan ke default ketika binding input sprint dilepaskan.
OnActivate (Client Script)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 sprint karakter dengan binding yang Anda pilih sebelumnya: LeftShift untuk keyboard, ButtonY untuk gamepad, dan tombol SprintButton di layar untuk perangkat yang mendukung sentuhan. Ingat bahwa Anda dapat menggunakan Controller Emulator untuk menguji input gamepad langsung di Roblox Studio.
Perubahan konteks
Setelah Anda memiliki konteks input seperti PlayContext, Anda dapat mengaktifkan/mematikan selama permainan melalui pengkodean, mengubah Priority untuk menentukan aksi mana yang lebih diutamakan daripada yang lain, dan Sink input agar tidak diproses dalam konteks dengan prioritas lebih rendah.
Untuk mempermudah beralih konteks dari skrip lain, masukkan BindableEvent baru ke dalam folder input Anda di dalam ReplicatedStorage dan ganti namanya menjadi ContextEvent.

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

Di dalam skrip UpdateContext, tempelkan kode berikut:
UpdateContext (Client Script)local ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")-- Hubungkan acara bindablecontextEvent.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 yang sudah ada, Anda sekarang dapat memperbarui InputContext dengan nama tertentu dengan memicu acara bindable, 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 acara bindable dengan konteks input target dan status diaktifkancontextEvent:Fire("PlayContext", true)end)
Binding default
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 |