Input 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 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:

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 pemandanganPengaturan 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.
SensorPerangkat mendeteksi orientasi fisiknya untuk memastikan pandangan pengalaman selalu berorientasi ke atas, beralih di antara mode lanskap dan potret sesuai kebutuhan.
Mode yang dikunci
Pemandangan tersisaPada 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 kananPada 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.
WajahPada 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 StarterGuiEnum.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:

PilihanDeskripsi
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
DynamicThumbstickTombol 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.
ScriptableNonaktifkan semua kontrol default dan memungkinkan Anda untuk menulis skema kontrol sendiri .
Thumbpad
ThumbstickTombol joystick mobile terletak di bagian bawah kiri layar.Tidak seperti DynamicThumbstick , posisi thumbstick statis dan tidak berubah posisi saat pengguna menyentuh layar.
UserChoiceMemungkinkan 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:

ParameterJenisDeskripsi
actionNamestringSebuah string identifikasi untuk tindakan yang Anda ikat. Anda dapat menggunakan actionName dengan fungsi lain di ContextActionService untuk mengedit pengikatan.
functionToBindfungsiFungsi untuk dipanggil ketika input yang ditentukan dipicu. Fungsi ini menerima tiga argumen:
  • Sebuah string sama dengan actionName.
  • A Enum.UserInputState yang mendefinisikan status input saat memanggil fungsi.
  • The InputObject yang digunakan dalam panggilan fungsi.
createTouchButtonbooleanKetika benar, membuat tombol di layar saat permainan berjalan di perangkat seluler.
inputTypestupleInput 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 gambar
ContextActionService:SetImage("Interact", "rbxassetid://104919049969988")
-- Tetuk posisi tombol
ContextActionService: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 modul
local UserInputModule = require(ReplicatedStorage:WaitForChild("UserInputModule"))
local currentUserInput, inputEnum = UserInputModule.getInputType()
print(currentUserInput, inputEnum)