Lebih dari setengah dari semua sesi Roblox dimainkan di perangkat seluler, jadi penting untuk mempertimbangkan aksesibilitas antar platform saat merancang pengalaman untuk audiens yang luas.Anda harus bertujuan untuk mendukung berbagai perangkat input, termasuk input mouse dan keyboard dan gamepad.
Saat merancang pengalaman seluler, pertimbangkan orientasi perangkat yang Anda rencanakan untuk digunakan pengguna dalam pengalaman Anda, lalu implementasikan input Anda dengan ContextActionService untuk melakukan tugas masuk terkait seluler berikut:
- Buat tombol di layar terlihat hanya di perangkat seluler.
- Konfigurasi input dependen konteks yang memungkinkan tombol atau input yang sama untuk melakukan tindakan berbeda tergantung pada situasi.
- Deteksi perangkat input lainnya , seperti mouse atau keyboard yang terhubung ke tablet seluler, untuk memberikan perintah yang benar di layar kepada pengguna.
Orientasi perangkat
Pada ponsel dan tablet, orientasi perangkat terutama memengaruhi pengalaman pengguna dan interaksi.Sebagai contoh, mode pemandangan paling baik dioperasikan dengan dua jari sementara mode potret dapat meminjamkan dirinya ke antarmuka satu jari.
Secara default, pengalaman Roblox dijalankan dalam mode lanskap, memungkinkan pengalaman beralih antara lanskap "kiri" dan lanskap "kanan" saat perangkat pengguna berputar.Namun, pengalaman dapat dikunci ke orientasi tertentu jika diinginkan.
Mode orientasi
Ada lima mode orientasi yang berbeda, termasuk dua mode berbasis sensor dan tiga mode terkunci.
Mode sensor | |
---|---|
Sensor pemandangan | Pengaturan Roblox default di mana pengalaman selalu muncul dalam mode lanskap (tidak ada mode potret) dan perangkat mendeteksi orientasi fisiknya untuk memastikan pandangan pengalaman selalu berorientasi ke atas. |
Sensor | Perangkat mendeteksi orientasi fisiknya untuk memastikan pandangan pengalaman selalu berorientasi ke atas, beralih di antara mode lanskap dan potret sesuai kebutuhan. |
Mode yang dikunci | |
---|---|
Pemandangan tersisa | Pada perangkat dengan tombol rumah fisik, tombol rumah ada di sebelah kiri tampilan.Pada perangkat dengan home virtual/nav bar, wilayah sentuhnya berada di bagian bawah tampilan. |
Pemandangan kanan | Pada perangkat dengan tombol rumah fisik, tombol rumah ada di sebelah kanan tampilan.Pada perangkat dengan home virtual/nav bar, wilayah sentuhnya berada di bagian bawah tampilan. |
Wajah | Pada perangkat dengan tombol rumah fisik, tombol rumah berada di bawah tampilan.Pada perangkat dengan home virtual/nav bar, wilayah sentuhnya berada di bagian bawah tampilan. |
Properti orientasi
Saat mengatur orientasi, Anda dapat mengatur orientasi awal, orientasi dalam pengalaman, dan orientasi saat ini.
Memulai orientasi
StarterGui.ScreenOrientation menetapkan orientasi default untuk tempat. Nilai yang dapat diterima termasuk:
Karena properti ini mempengaruhi semua pengguna baru yang bergabung dengan pengalaman, Anda dapat menetapkan nilainya di StarterGui → Enum.ScreenOrientation dalam Studio.
Orientasi dalam pengalaman
PlayerGui.ScreenOrientation secara eksplisit mengubah orientasi pengalaman untuk pengguna.Ketika properti ini ditetapkan ke salah satu dari Enum.ScreenOrientation enum dalam LocalScript , pengalaman akan segera menyesuaikan diri untuk mencocokkan pengaturan.Ini bisa berguna ketika pengalaman perlu memberikan pengalaman khusus seperti mengunci pandangan ke potret untuk minigame.
Contoh kode berikut dalam LocalScript menetapkan orientasi layar ke potret:
local Players = game:GetService("Players")local playerGUI = Players.LocalPlayer:WaitForChild("PlayerGui")task.wait(2)playerGUI.ScreenOrientation = Enum.ScreenOrientation.Portrait
Orientasi saat ini
PlayerGui.CurrentScreenOrientation mendapatkan orientasi perangkat saat ini. Nilai yang mungkin termasuk:
Kode berikut memencetak orientasi layar saat ini pengguna:
local Players = game:GetService("Players")local playerGUI = Players.LocalPlayer:WaitForChild("PlayerGui")print(playerGUI.CurrentScreenOrientation)
Mode gerakan karakter
Roblox menawarkan beberapa properti StarterPlayer yang dapat Anda atur untuk mengubah cara pengguna di perangkat seluler dapat bergerak melalui pengalaman Anda.
Anda dapat mengatur skema kontrol gerakan mobile untuk pengalaman Roblox dengan mengubah nilai StarterPlayer.DevTouchMovementMode menjadi salah satu dari mengikuti:
Pilihan | Deskripsi |
---|---|
ClickToMove | Pengguna hanya dapat bergerak melalui pengalaman dengan mengetuk lokasi target.Mode ini termasuk tombol lompat di bagian bawah kanan layar.Lompat otomatis selalu aktif dalam mode gerakan ini. |
DPad | |
DynamicThumbstick | Tombol geser dinamis muncul di mana pengguna awalnya menekan ke bawah.Mode ini termasuk tombol lompat di bagian bawah kanan layar.Ini adalah pengaturan pengguna default untuk pengguna seluler jika UserChoice diatur. |
Scriptable | Nonaktifkan semua kontrol default dan memungkinkan Anda untuk menulis skema kontrol sendiri . |
Thumbpad | |
Thumbstick | Tombol joystick mobile terletak di bagian bawah kiri layar.Tidak seperti DynamicThumbstick , posisi thumbstick statis dan tidak berubah posisi saat pengguna menyentuh layar. |
UserChoice | Memungkinkan pengguna untuk memilih skema kontrol yang diinginkan dari menu Pengaturan dalam pengalaman. Ini adalah mode gerakan default untuk pengalaman. |
Lompat otomatis
Ketika StarterPlayer.AutoJumpEnabled diaktifkan, karakter pengguna secara otomatis melompat melintasi celah saat mendekati ujung platform. StarterPlayer.AutoJumpEnabled diaktifkan secara default untuk perangkat seluler.
Nonaktifkan StarterPlayer.AutoJumpEnabled untuk menonaktifkan fitur ini dan memaksa pengguna untuk melompat hanya menggunakan keybind mereka.
Tombol Seluler Khusus
Untuk menambahkan tombol seluler khusus, gunakan metode ContextActionService:BindAction() yang mengambil parameter berikut:
Parameter | Jenis | Deskripsi |
---|---|---|
actionName | string | Sebuah string identifikasi untuk tindakan yang Anda ikat. Anda dapat menggunakan actionName dengan fungsi lain di ContextActionService untuk mengedit pengikatan. |
functionToBind | fungsi | Fungsi untuk dipanggil ketika input yang ditentukan dipicu. Fungsi ini menerima tiga argumen:
|
createTouchButton | boolean | Ketika benar, membuat tombol di layar saat permainan berjalan di perangkat seluler. |
inputTypes | tuple | Input yang Anda niat untuk mengikat ke fungsi, seperti nilai enum dari Enum.KeyCode . |
Anda dapat menggunakan contoh kode berikut untuk membuat tindakan Interaksi yang membuat tombol di layar dan juga menerima input keyboard dan gamepad :
local ContextActionService = game:GetService("ContextActionService")
local function handleAction(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print(actionName, inputObject)
end
end
-- Ikatkan tindakan ke fungsi
ContextActionService:BindAction("Interact", handleAction, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)
Setelah tombol khusus ditambahkan, Anda dapat menggunakan salah satu dari beberapa fungsi dari ContextActionService untuk menyesuaikan tombol di layar yang dibuat oleh BindAction() .
- Untuk mengubah label teks untuk tombol seluler, panggil SetTitle() dengan string actionName dan string judul.
- Untuk menggunakan gambar khusus seperti tombol GUI lainnya, panggil metode SetImage(), menggantikan ID aset contoh di bawah dengan gambar pilihan Anda.
- Untuk menetapkan posisi tombol, panggil SetPosition() dengan nilai posisi UDim2.
-- Tetapkan label tombol untuk "Bicara"ContextActionService:SetTitle("Interact", "Talk")-- Setel tombol gambarContextActionService:SetImage("Interact", "rbxassetid://104919049969988")-- Tetuk posisi tombolContextActionService:SetPosition("Interact", UDim2.new(1, -70, 0, 10))
Input Tergantung Konteks
Saat mengembangkan untuk perangkat seluler, Anda sering mungkin ingin mengubah apa yang dilakukan satu tombol berdasarkan konteks.Karena ruang layar di perangkat seluler terbatas, gunakan tombol konteks yang melakukan tindakan berbeda berdasarkan apa yang dapat dilakukan karakter.
Sebagai contoh, Anda dapat menampilkan tombol "Kumpulkan" aktif saat pengguna berdiri di dekat peti emas, terikat pada fungsi collectTreasure() :
local ContextActionService = game:GetService("ContextActionService")
local function collectTreasure(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print("Collect treasure")
end
end
ContextActionService:BindAction("Interact", collectTreasure, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)
ContextActionService:SetTitle("Interact", "Collect")
ContextActionService:SetPosition("Interact", UDim2.new(1, -70, 0, 10))
Di titik lain selama gameplay, Anda dapat mengubah tombol menjadi "Bicara" ketika pengguna berdiri di dekat NPC.Alih-alih menghapus tombol yang ada untuk menempatkan tombol lain, Anda dapat dengan mudah memanggil BindAction() pada action"Interact" yang ada, mengubah fungsi target dan judul tombol:
ContextActionService:BindAction("Interact", talkToNPC, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)ContextActionService:SetTitle("Interact", "Talk")
Deteksi perangkat lain
Dalam pengalaman multi-platform, penting untuk merujuk pilihan input yang diinginkan pengguna dengan menampilkan opsi input untuk perangkat yang aktif digunakan.Sebagai contoh, perangkat seluler dapat memiliki mouse dan keyboard atau gamepad terhubung, atau mungkin desktop memiliki layar sentuh diaktifkan.Jika beberapa sumber input diaktifkan, Anda dapat menggunakan GetLastInputType() untuk mendapatkan perangkat input terakhir pengguna.
Sebagai dasar, Anda dapat menggunakan berikut ModuleScript , ditempatkan di dalam ReplicatedStorage dan diubah menjadi UserInputModule , untuk mengambil ketikinput pengguna, setelah itu Anda dapat menyesuaikan tata letak UI atau konteks ke kebutuhan spesifik pengalaman Anda.
local UserInputService = game:GetService("UserInputService")
local UserInput = {}
local inputTypeString
-- Jika perangkat memiliki keyboard dan mouse aktif, asumsikan input tersebut
if UserInputService.KeyboardEnabled and UserInputService.MouseEnabled then
inputTypeString = "Keyboard/Mouse"
-- Jika perangkat memiliki kemampuan sentuhan tetapi tidak ada keyboard dan mouse, asumsikan input sentuhan
elseif UserInputService.TouchEnabled then
inputTypeString = "Touch"
-- Jika perangkat memiliki gamepad aktif, asumsikan input gamepad
elseif UserInputService.GamepadEnabled then
inputTypeString = "Gamepad"
end
function UserInput.getInputType()
local lastInputEnum = UserInputService:GetLastInputType()
if lastInputEnum == Enum.UserInputType.Keyboard or string.find(tostring(lastInputEnum.Name), "MouseButton") or lastInputEnum == Enum.UserInputType.MouseWheel then
inputTypeString = "Keyboard/Mouse"
elseif lastInputEnum == Enum.UserInputType.Touch then
inputTypeString = "Touch"
elseif string.find(tostring(lastInputEnum.Name), "Gamepad") then
inputTypeString = "Gamepad"
end
return inputTypeString, lastInputEnum
end
return UserInput
Setelah skrip UserInputModule ada di tempatnya, gunakan sampel kode berikut di LocalScript untuk mendapatkan ketikinput terakhir pengguna:
local ReplicatedStorage = game:GetService("ReplicatedStorage")-- Memerlukan modullocal UserInputModule = require(ReplicatedStorage:WaitForChild("UserInputModule"))local currentUserInput, inputEnum = UserInputModule.getInputType()print(currentUserInput, inputEnum)