Lebih dari setengah dari semua sesi Roblox dimainkan di perangkat seluler, jadi penting untuk mempertimbangkan kesesuaian aksesibilitas antara platform saat merancang pengalaman untuk penonton yang lebih luas. Anda harus bertujuan untuk mendukung berbagai perangkat masuk, termasuk masukan mouse dan keyboard dan gamepad.
Saat mendesain pengalaman seluler, pertimbangkan orientasi perangkat yang Anda berniat pengguna untuk menggunakan dalam pengalaman Anda, lalu implementasi masukan Anda dengan ContextActionService untuk melakukan berbagai tugas masukan terkait seluler:
- Buat tombol pada layar hanya terlihat di perangkat seluler.
- Sesuaikan tombol dan UI ponsel untuk menciptakan pengalaman ponsel yang unik untuk membuat pengalaman ponsel yang unik.
- Konfigurasikan input yang tergantung yang memungkinkan tombol atau masukan yang sama untuk mengeksekusi tindakan yang berbeda tergantung pada situasi.
- Terkompresi menyediakan prompt pada layar yang benar kepada pengguna.
Orientasi Perangkat
Pada telepon dan tablet, orientasi perangkat terutama mempengaruhi pengalaman pengguna dan interaksi. Misalnya, mode lanskap dapat dioperasikan dengan dua jari sementara mode potret dapat dioperasikan dengan satu jari.
Secara default, pengalaman Roblox berjalan dalam mode lanskap, memungkinkan pengalaman untuk 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 berdasar pada sensor dan tiga mode yang 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 agar tampilan pengalaman selalu berorientasi ke atas. |
Pelacak | Perangkat mendeteksi orientasi fisiknya untuk memastikan pandangan pengalaman selalu bergerak ke atas, beralih antara mode lanskap dan mode potret sebagai perlu. |
Mode Terkunci | |
---|---|
Pemandangan Kiri | Pada perangkat dengan tombol rumah fisik, tombol rumah ada di sebelah kanan tampilan. Pada perangkat dengan bar rumah virtual/naik, wilayah sentuhannya berada di bawah tampilan. |
Pemandangan Kanan | Pada perangkat dengan tombol rumah fisik, tombol rumah berada di sebelah kanan layar. Pada perangkat dengan bar rumah virtual/nav, jejak sentuhannya berada di bagian bawah layar. |
Portret | Pada perangkat dengan tombol rumah fisik, tombol rumah ada di bawah layar. Pada perangkat dengan bar rumah virtual/naik, wilayah sentuhannya berada di bawah layar. |
プロパティ Orientasi
Ketika menetapkan orientasi, Anda dapat menetapkan Orientasi Pemula, Orientasi Pengalaman, dan Orientasi Saat Ini.
Memulai Orientasi
StarterGui.ScreenOrientation tetapkan orientasi default untuk tempat.Nilai yang diterima termasuk:
Karena property ini mengubah semua pengguna baru yang bergabung dengan pengalaman, Anda dapat menetapkan nilainya dalam StarterGui → Enum.ScreenOrientation di dalam Studio.
Orientasi dalam Pengalaman
PlayerGui.ScreenOrientation secara eksplisit mengubah orientasi pengalaman untuk pengguna. Ketika property ini diatur ke salah satu dari Enum.ScreenOrientation enums dalam LocalScript , pengalaman akan segera menyesuaikan diri untuk mencocokkan pengaturan. Ini dapat berguna ketika p
Sampel kode berikut dalam LocalScript menetapkan orientasi layar ke portret:
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 berikutnya mencetak 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 StarterPlayer properti yang dapat Anda tetapkan untuk mengubah cara pengguna di perangkat seluler dapat bergerak melalui pengalaman Anda.
Anda dapat mengatur skema kontrol gerakan seluler untuk pengalaman Roblox dengan mengubah nilai StarterPlayer.DevTouchMovementMode ke salah satu dari mengikuti:
Opsi | 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 | Sebuah tombol jempol dinamis muncul di mana pengguna awalnya menekan ke bawah. Mode ini termasuk tombol lompat di wilayah bawah kanan屏幕. Ini adalah pengaturan pengguna default untuk pengguna mobile jika UserChoice di set. |
Scriptable | Nonaktifkan semua kontrol default dan izinkan Anda untuk menyetel skema kontrol Anda sendiri . |
Thumbpad | |
Thumbstick | Sebuah tombol jempol mobile berlokasi di wilayah bawah kiri layar. Berbeda dengan DynamicThumbstick, posisi tombol jempol tidak dapat diubah ketika pengguna menyentuh di layar. |
UserChoice | Memungkinkan pengguna untuk memilih skema kontrol yang mereka inginkan dari menu In-Experience Settings. Ini adalah mode gerakan default untuk pengalaman. |
Lompat Otomatis
Ketika StarterPlayer.AutoJumpEnabled diaktifkan, karakter pengguna secara otomatis melompati celah saat mendekati sudut sebuah platform. StarterPlayer.AutoJumpEnabled diaktifkan secara default untuk perangkat seluler.
Nonaktifkan StarterPlayer.AutoJumpEnabled untuk menonaktifkan fitur ini dan memaksa pengguna untuk melompat hanya menggunakan kait pengikat kunci mereka.
Menambahkan Tombol Seluler
Untuk menambahkan tombol seluler, gunakan metode ContextActionService:BindAction() .
Metode BindAction() mengambil parameter berikut:
Parameter | Jenis | Deskripsi |
---|---|---|
namaAksi | string | String identifikasi untuk tindakan yang Anda ikat. Anda dapat menggunakan actionName dengan fungsi lain di ContextActionService untuk mengedit binding. |
fungsiTerikat | fungsi | Fungsi untuk memanggil ketika input yang ditentukan diaktifkan. Fungsi ini menerima tiga argumen:
|
BuatTombolSentuh | boolean | Ketika benar, menciptakan tombol pada layar saat game dijalankan di perangkat seluler. |
Jenis masukan | aset | Input yang Anda berniat untuk dibindakan ke fungsi, seperti nilai daftar dari Enum.KeyCode . |
Anda dapat menggunakan contoh kode berikut untuk membuat tindakan Interact yang membuat tombol on-screen 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
-- Ikat tindakan untuk fungsi
ContextActionService:BindAction("Interact", handleAction, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)
Menghapus Tombol Seluler
Untuk menghapus tombol seluler dari layar, panggil Class.ContextActionService:UnbindAction()|UnbindAction() menggunakan string actionName yang Anda berikan kepada Class.ContextActionService:BindAction()|BindAction() .
Gunakan contoh kode berikut untuk melepaskan tautan actionInteract sebelumnya:
-- Batalkan tindakan berdasarkan namaContextActionService:UnbindAction("Interact")
Mengubah UI Tombol
Anda dapat menggunakan salah satu dari beberapa fungsi dari ContextActionService untuk menyesuaikan tombol pada layar yang dibuat oleh BindAction() .
Teks Tombol
Untuk mengubah label teks untuk tombol seluler, panggil SetTitle() dengan string actionName dan judul:
-- Tetapkan label tombol ke "Bicara"ContextActionService:SetTitle("Interact", "Talk")
Gambar Tombol
Tombol ponsel dapat menggunakan gambar khusus seperti tombol GUI lainnya menggunakan metode SetImage() .
Gunakan kode sampel berikut untuk menetapkan gambar tombol, mengganti ID aset dengan gambar pilihan Anda:
-- Tetapkan gambar tombolContextActionService:SetImage("Interact", "rbxassetid://0123456789")
Posisi Tombol
Secara default, posisi tombol baru muncul di dekat bagian bawah kanan layar. Anda harus mempertimbangkan posisi tombol pada perangkat seluler dan ingat posisi jari dan tangan.
Gunakan kode sampel berikut untuk menetapkan posisi tombol dengan metode SetPosition() :
-- Tetapkan posisi tombolContextActionService:SetPosition("Interact", UDim2.new(1, -70, 0, 10))
Input yang Dapat Dipengaruhi
Saat mengembangkan untuk perangkat seluler, Anda mungkin sering ingin mengubah apa yang dilakukan tombol tunggal berdasarkan konteks. Karena ruang layar pada perangkat seluler terbatas, gunakan tombol konteks yang melakukan tindakan berbeda berdasarkan apa yang dapat dilakukan karakter.
Misalnya, Anda dapat menampilkan tombol "Kumpulkan" yang aktif ketika pengguna berdiri di dekat peti emas:
Gunakan contoh kode berikut untuk menciptakan tombol mobile yang bernama "Kumpulkan" dan 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:SetPosition("Interact", UDim2.new(1, -70, 0, 10))
-- Tetapkan gambar untuk tombol "Kumpulkan"
ContextActionService:SetImage("Interact", "rbxassetid://0123456789")
Pada titik lain dalam game, Anda dapat mengubah tombol untuk "Bicara" ketika pengguna berdiri di dekat NPC. Alih-alih menambahkan dan menghapus tombol yang ada, Anda hanya dapat menggunakan ContextActionService:BindAction() pada tindakan Interaksi yang sudah action, mengubah fungsi dan gambar tombol.
Gunakan contoh kode berikut untuk menetapkan label tombol yang ada sebagai "Talk" dan menautkannya ke fungsi bernama talkToNPC:
ContextActionService:BindAction("Interact", talkToNPC, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)-- Tetapkan gambar ke kuning "Talk" buttonContextActionService:SetImage("Interact", "rbxassetid://0011223344")
Mendeteksi Perangkat Lain
Dalam pengalaman platform berbasis, diperlukan untuk mengetahui perangkat saat ini pengguna untuk menyesuaikan UI dan menampilkan petunjuk kunci yang benar.
Misalnya, jika seorang pengguna mendekati peti harta karun dan ada tindakan yang terikat untuk mengumpulkan emas, Anda dapat menunjukkan pengguna seluler tombol "Kumpulkan" dan pengguna desktop tombol "T" .
Harap ingat bahwa perangkat seluler juga dapat memiliki mouse dan keyboard atau gamepad yang terhubung. Ini juga mungkin bahwa perangkat tertentu memiliki touchscreen yang diaktifkan. Penting untuk mengacu pada opsi input pengguna yang diaktifkan dengan menampilkan opsi input untuk perangkat yang aktif.
Dalam kasus ini, Anda dapat menggunakan UserInputService untuk mendeteksi perangkat input mana yang diaktifkan. Jika beberapa perangkat input diaktifkan, gunakan UserInputService:GetLastInputType() untuk mendapatkan perangkat input terakhir yang digunakan oleh pengguna untuk ditampilkan di UI.
Anda dapat menggunakan ReplicatedStorage , yang ditempatkan di dalam Class.ReplicatedStorage dan diubah menjadi 1> UserInputModule1> , untuk mengambil ketikmasukan pengguna, setelah itu Anda dapat mengadaptasi tata letak UI atau konteks kebutuhan spesifik pengalaman Anda.
Gunakan berikut ModuleScript untuk memeriksa perangkat masuk yang diaktifkan dan perangkat masuk terakhir yang digunakan:
local UserInputService = game:GetService("UserInputService")
local UserInput = {}
local inputTypeString
-- Jika perangkat memiliki keyboard dan mouse aktif, asumsikan bahwa input tersebut
if UserInputService.KeyboardEnabled and UserInputService.MouseEnabled then
inputTypeString = "Keyboard/Mouse"
-- Jika perangkat memiliki kemampuan sentuh tetapi tidak ada keyboard dan mouse, anggap sentuh masuk
elseif UserInputService.TouchEnabled then
inputTypeString = "Touch"
-- Jika perangkat memiliki gamepad aktif, asumsikan masukan 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 UserInputModule skrip berada di tempat, gunakan contoh 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)