Masukan Seluler

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

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:

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 PemandanganPengaturan 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.
PelacakPerangkat mendeteksi orientasi fisiknya untuk memastikan pandangan pengalaman selalu bergerak ke atas, beralih antara mode lanskap dan mode potret sebagai perlu.
Mode Terkunci
Pemandangan KiriPada 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 KananPada 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.
PortretPada 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 StarterGuiEnum.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:

OpsiDeskripsi
ClickToMovePengguna 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
DynamicThumbstickSebuah 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.
ScriptableNonaktifkan semua kontrol default dan izinkan Anda untuk menyetel skema kontrol Anda sendiri .
Thumbpad
ThumbstickSebuah tombol jempol mobile berlokasi di wilayah bawah kiri layar. Berbeda dengan DynamicThumbstick, posisi tombol jempol tidak dapat diubah ketika pengguna menyentuh di layar.
UserChoiceMemungkinkan 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:

ParameterJenisDeskripsi
namaAksistringString identifikasi untuk tindakan yang Anda ikat. Anda dapat menggunakan actionName dengan fungsi lain di ContextActionService untuk mengedit binding.
fungsiTerikatfungsiFungsi untuk memanggil ketika input yang ditentukan diaktifkan. Fungsi ini menerima tiga argumen:
  • Sebuah string sama dengan actionName.
  • A Enum.UserInputState yang mendefinisikan status masuk saat memanggil fungsi.
  • Class.InputObject yang digunakan dalam panggilan fungsi.
BuatTombolSentuhbooleanKetika benar, menciptakan tombol pada layar saat game dijalankan di perangkat seluler.
Jenis masukanasetInput 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 nama
ContextActionService: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 tombol
ContextActionService: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 tombol
ContextActionService: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" button
ContextActionService: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.

PC
Seluler

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 modul
local UserInputModule = require(ReplicatedStorage:WaitForChild("UserInputModule"))
local currentUserInput, inputEnum = UserInputModule.getInputType()
print(currentUserInput, inputEnum)