การป้อนข้อมูลบนมือถือ

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

มากกว่าครึ่งของเซสชัน Roblox ทั้งหมดเล่นบนอุปกรณ์มือถือดังนั้นจึงเป็นสิ่งสำคัญที่ต้องพิจารณาการเข้าถึงแบบข้ามแพลตฟอร์มเมื่อออกแบบประสบการณ์สำหรับผู้ชมจำนวนมากคุณควรมุ่งเน้นไปที่การสนับสนุนอุปกรณ์อินพุตหลากหลาย, รวมถึง การใส่ข้อมูลเมาส์และแป้นพิมพ์ และ เกมแพด

เมื่อออกแบบประสบการณ์บนมือถือ ให้พิจารณา การจัดตำแหน่งอุปกรณ์ ที่คุณตั้งใจให้ผู้ใช้ใช้ในประสบการณ์ของคุณ จากนั้นใช้การป้อนข้อมูลของคุณด้วย ContextActionService เพื่อดําเนินการทําภารกิจการป้อนข้อมูลที่เกี่ยวข้องกับมือถือต่อไป:

การจัดตำแหน่งอุปกรณ์

บนโทรศัพท์และแท็บเล็ต การจัดตำแหน่งอุปกรณ์ส่วนใหญ่มีผลต่อประสบการณ์และการโต้ตอบของผู้ใช้ตัวอย่างเช่น โหมดภูมิทัศน์ทำงานได้ดีที่สุดด้วยนิ้วสองนิ้วในขณะที่โหมดภาพวาดอาจให้ตัวเลือกการใช้งานด้วยนิ้วเดียว

โดยค่าเริ่มต้น Roblox ประสบการณ์จะทำงานในโหมดแนวนอน ช่วยให้ประสบการณ์สามารถสลับระหว่างแนวนอน "ซ้าย" และแนวนอน "ขวา" ตามที่อุปกรณ์ของผู้ใช้หมุนอย่างไรก็ตาม ประสบการณ์สามารถถูกล็อคไว้ในทิศทางเฉพาะได้หากต้องการ

โหมดการจัดตำแหน่ง

มีโหมดการจัดตำแหน่งที่แตกต่างกันห้าโหมดรวมถึงโหมดสองโหมดที่ใช้เซนเซอร์และสามโหมดล็อค

โหมดเซนเซอร์
เซนเซอร์ภูมิทัศน์การตั้งค่า Roblox เริ่มต้นในซึ่งประสบการณ์จะปรากฏเสมอในโหมดแนวนอน (ไม่มีโหมดแนวตั้ง) และอุปกรณ์ตรวจจับการหมุนทางกายภาพของมันเพื่อให้แน่ใจว่ามุมมองประสบการณ์เสมอมุ่งขึ้น
เซนเซอร์อุปกรณ์ตรวจจับการจัดเรียงทางกายภาพเพื่อให้แน่ใจว่ามุมมองประสบการณ์มุ่งขึ้นเสมอ สลับไปมาระหว่างโหมดภูมิทัศน์และโหมดภาพถ่ายได้ตามต้องการ
โหมดล็อค
ทิวทัศน์ที่เหลือบนอุปกรณ์ที่มีปุ่มบ้านทางกายภาพ ปุ่มบ้านจะอยู่ทางซ้ายของหน้าจอบนอุปกรณ์ที่มีแถบบ้านเสมือนหรือแถบนําทาง พื้นที่สัมผัสของมันอยู่ที่ด้านล่างของการแสดงผล
ทิวทัศน์ด้านขวาบนอุปกรณ์ที่มีปุ่มบ้านทางกายภาพ ปุ่มบ้านจะอยู่ทางด้านขวาของหน้าจอบนอุปกรณ์ที่มีแถบบ้านเสมือนหรือแถบนําทาง พื้นที่สัมผัสของมันอยู่ที่ด้านล่างของการแสดงผล
ภาพถ่ายบนอุปกรณ์ที่มีปุ่มบ้านทางกายภาพ ปุ่มบ้านจะอยู่ด้านล่างของหน้าจอบนอุปกรณ์ที่มีแถบบ้านเสมือนหรือแถบนําทาง พื้นที่สัมผัสของมันอยู่ที่ด้านล่างของการแสดงผล

คุณสมบัติการจัดเรียง

เมื่อตั้งค่าการจัดเรียง คุณสามารถตั้งค่า การจัดเรียงเริ่มต้น การจัดเรียงในประสบการณ์ และการจัดเรียงปัจจุบัน

เริ่มการจัดระเบียบ

StarterGui.ScreenOrientation ตั้งค่าการจัดเรียงเริ่มต้นสำหรับสถานที่ มีค่าที่ยอมรับได้รวมถึง:

เนื่องจากคุณสมบัตินี้มีผลต่อผู้ใช้ใหม่ทั้งหมดที่เข้าร่วมประสบการณ์ คุณสามารถตั้งค่าค่าของมันใน StarterGuiEnum.ScreenOrientation ภายใน Studio

การจัดระเบียบในประสบการณ์

PlayerGui.ScreenOrientation เปลี่ยนการจัดเรียงประสบการณ์สำหรับผู้ใช้อย่างชัดเจนเมื่อคุณสร้างคุณสมบัตินี้ให้เป็นหนึ่งในตัวเลือก Enum.ScreenOrientation ใน LocalScript ความประสบการณ์จะจัดให้ตรงกับการตั้งค่าทันทีสิ่งนี้อาจมีประโยชน์เมื่อประสบการณ์ต้องให้ประสบการณ์เฉพาะเช่นล็อคมุมมองไปยังแนวนอนสำหรับมินิเกม

ตัวอย่างโค้ดต่อไปนี้ใน LocalScript ตั้งค่าการจัดเรียงหน้าจอเป็นแนวนอน:


local Players = game:GetService("Players")
local playerGUI = Players.LocalPlayer:WaitForChild("PlayerGui")
task.wait(2)
playerGUI.ScreenOrientation = Enum.ScreenOrientation.Portrait

การจัดตำแหน่งปัจจุบัน

PlayerGui.CurrentScreenOrientation ได้รับการจัดตำแหน่งอุปกรณ์ปัจจุบัน มีค่าที่เป็นไปได้รวมถึง:

รหัสต่อไปนี้พิมพ์การจัดตำแหน่งหน้าจอปัจจุบันของผู้ใช้:


local Players = game:GetService("Players")
local playerGUI = Players.LocalPlayer:WaitForChild("PlayerGui")
print(playerGUI.CurrentScreenOrientation)

โหมดการเคลื่อนที่ของตัวละคร

Roblox มีคุณสมบัติหลายอย่าง StarterPlayer ที่คุณสามารถตั้งค่าเพื่อเปลี่ยนวิธีที่ผู้ใช้บนอุปกรณ์เคลื่อนที่สามารถเคลื่อนที่ผ่านประสบการณ์ของคุณได้

คุณสามารถตั้งค่ามาตรการควบคุมการเคลื่อนไหวบนมือถือสำหรับประสบการณ์ Roblox โดยการเปลี่ยนค่าของ StarterPlayer.DevTouchMovementMode กำลังติดตาม:

ตัวเลือกคําอธิบาย
ClickToMoveผู้ใช้สามารถเคลื่อนที่ผ่านประสบการณ์ได้โดยแตะตำแหน่งเป้าหมายโหมดนี้รวมปุ่มกระโดดในภูมิภาคด้านล่างขวาของหน้าจอการกระโดดอัตโนมัติ เปิดใช้งานเสมอในโหมดการเคลื่อนไหวนี้
DPad
DynamicThumbstickธัมบ์สติกไดนามิกปรากฏขึ้นที่ผู้ใช้กดลงเป็นครั้งแรกโหมดนี้รวมปุ่มกระโดดในภูมิภาคด้านล่างขวาของหน้าจอนี่คือการตั้งค่าผู้ใช้เริ่มต้นสำหรับผู้ใช้บนมือถือถ้า UserChoice ถูกตั้งค่า
Scriptableปิดใช้งานการควบคุมเริ่มต้นทั้งหมดและอนุญาตให้คุณ สคริปต์แผนการควบคุมของคุณเอง
Thumbpad
Thumbstickสติกเกอร์มือถือที่ตั้งอยู่ในภูมิภาคด้านล่างซ้ายของหน้าจอไม่เหมือน DynamicThumbstick ตำแหน่งของ thumbstick คงที่และไม่เปลี่ยนตำแหน่งเมื่อผู้ใช้แตะที่หน้าจอ
UserChoiceสามารถให้ผู้ใช้เลือกแผนควบคุมที่ต้องการจากเมนูการตั้งค่าในประสบการณ์ นี่คือโหมดการเคลื่อนที่เริ่มต้นสำหรับประสบการณ์

กระโดดอัตโนมัติ

เมื่อเปิดใช้งาน StarterPlayer.AutoJumpEnabled แล้ว ตัวละครของผู้ใช้จะกระโดดข้ามช่องว่างโดยอัตโนมัติเมื่อใกล้ถึงขอบของแพลตฟอร์มStarterPlayer.AutoJumpEnabled เปิดใช้งานโดยค่าเริ่มต้นสำหรับอุปกรณ์มือถือ

ปิดใช้งาน StarterPlayer.AutoJumpEnabled เพื่อปิดใช้งานคุณลักษณะนี้และบังคับให้ผู้ใช้กระโดดโดยใช้เฉพาะการผูกคีย์ของพวกเขา

ปุ่มมือถือที่กําหนดเอง

เพื่อเพิ่มปุ่มมือถือที่กําหนดเองใช้วิธี ContextActionService:BindAction() ซึ่งใช้พารามิเตอร์ต่อไปนี้:

พารามิเตรประเภทคําอธิบาย
actionNameสตริงสตริงระบุตัวตนสำหรับการดำเนินการที่คุณผูก คุณสามารถใช้ชื่อการดำเนินการกับฟังก์ชันอื่นๆ ใน ContextActionService เพื่อแก้ไขการผูก
functionToBindฟังก์ชันฟังก์ชันที่จะเรียกเมื่ออินพุตที่ระบุถูกกระตุ้น ฟังก์ชันนี้ได้รับอาร์กิวเมนต์สามอย่าง:
  • สตริงที่เท่ากับชื่อการดำเนินการ
  • A Enum.UserInputState ซึ่งกำหนดสถานะการใส่เมื่อเรียกฟังก์ชัน
  • The InputObject ที่ใช้ในการเรียกฟังก์ชัน
createTouchButtonเป็นไปได้เมื่อถูกต้อง จะสร้างปุ่มบนหน้าจอเมื่อเกมกำลังดำเนินการบนอุปกรณ์เคลื่อนที่
inputTypesตัวละคร tupleอินพุตที่คุณตั้งใจจะผูกกับฟังก์ชัน เช่น ค่าเอนรูมจาก Enum.KeyCode

คุณสามารถใช้ตัวอย่างโค้ดต่อไปนี้เพื่อสร้างการดำเนินการโต้ตอบที่สร้างปุ่มบนหน้าจอและยอมรับการใส่ข้อมูลแป้นพิมพ์และเกมแพด:


local ContextActionService = game:GetService("ContextActionService")
local function handleAction(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print(actionName, inputObject)
end
end
-- ผูกการดำเนินการกับฟังก์ชัน
ContextActionService:BindAction("Interact", handleAction, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)

เมื่อเพิ่มปุ่มที่กําหนดเองแล้ว คุณสามารถใช้หนึ่งในหลายฟังก์ชันจาก ContextActionService เพื่อปรับแต่งปุ่มบนหน้าจอที่สร้างโดย BindAction()

  • เพื่อเปลี่ยนฉลากข้อความสำหรับปุ่มมือถือ โทร SetTitle() ด้วยสตริง actionName และสตริงชื่อ
  • เพื่อใช้ภาพที่กําหนดเองเช่นเดียวกับปุ่ม GUI อื่น ๆ โทร SetImage() วิธี, แทนที่รหัสสินทรัพย์ตัวอย่างด้านล่างด้วยภาพที่คุณเลือก
  • เพื่อตั้งตำแหน่งของปุ่ม โทร SetPosition() ด้วยค่าตำแหน่ง UDim2

-- ตั้งชื่อปุ่มเป็น "พูดคุย"
ContextActionService:SetTitle("Interact", "Talk")
-- ตั้งภาพปุ่ม
ContextActionService:SetImage("Interact", "rbxassetid://104919049969988")
-- ตั้งตำแหน่งปุ่ม
ContextActionService:SetPosition("Interact", UDim2.new(1, -70, 0, 10))

อินพุตที่ขึ้นอยู่กับบริบท

เมื่อพัฒนาสำหรับอุปกรณ์เคลื่อนที่คุณอาจต้องการเปลี่ยนสิ่งที่ปุ่มเดียวทำตามบริบทได้บ่อยเนื่องจากพื้นที่หน้าจอบนอุปกรณ์เคลื่อนที่มีจํากัด ให้ใช้ปุ่มบริบทที่ดําเนินการด้วยการกระทําที่แตกต่างกันตามที่ตัวละครสามารถทําได้

ตัวอย่างเช่น คุณสามารถแสดงปุ่ม "รวบรวม" ที่ใช้งานอยู่เมื่อผู้ใช้ยืนอยู่ใกล้ตู้ทองที่ผูกกับฟังก์ชัน 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))

ในจุดอื่นระหว่างการเล่นเกมคุณสามารถเปลี่ยนปุ่มเป็น "พูดคุย" เมื่อผู้ใช้ยืนอยู่ใกล้ NPCแทนที่จะลบปุ่มที่มีอยู่เพื่อวางอีกปุ่มหนึ่งคุณสามารถเรียก BindAction() บนการดำเนินการเดิม "Interact" เปลี่ยนฟังก์ชันเป้าหมายและชื่อปุ่ม:


ContextActionService:BindAction("Interact", talkToNPC, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)
ContextActionService:SetTitle("Interact", "Talk")

ตรวจจับอุปกรณ์อื่น

ในประสบการณ์ข้ามแพลตฟอร์ม เป็นสิ่งสำคัญที่ต้องอ้างอิงตัวเลือกการป้อนของผู้ใช้ที่ชื่นชอบโดยแสดงตัวเลือกการป้อนสำหรับอุปกรณ์ที่ใช้งานอยู่ตัวอย่างเช่น อุปกรณ์เคลื่อนที่สามารถมีเมาส์และแป้นพิมพ์ หรือแปดเกมแพด หรืออาจเป็นไปได้ว่าเดสก์ท็อปมีหน้าจอสัมผัสเปิดใช้งานหากมีหลายแหล่งอินพุตที่เปิดใช้งานคุณสามารถใช้ GetLastInputType() เพื่อรับอุปกรณ์อินพุตล่าสุดของผู้ใช้

ในฐานะพื้นฐานคุณสามารถใช้ ModuleScript ต่อไปนี้ วางภายใน ReplicatedStorage และเปลี่ยนชื่อเป็น UserInputModule พิมพ์UI หรือบริบทตามความต้องการเฉพาะของประสบการณ์ได้


local UserInputService = game:GetService("UserInputService")
local UserInput = {}
local inputTypeString
-- หากอุปกรณ์มีแป้นพิมพ์และเมาส์ที่ใช้งานอยู่ คาดว่าการใส่ข้อมูลเหล่านั้น
if UserInputService.KeyboardEnabled and UserInputService.MouseEnabled then
inputTypeString = "Keyboard/Mouse"
-- หากอุปกรณ์มีความสามารถในการแตะ แต่ไม่มีแป้นพิมพ์และเมาส์ คาดว่าการแตะจะเป็นอินพุต
elseif UserInputService.TouchEnabled then
inputTypeString = "Touch"
-- หากอุปกรณ์มีเกมแพดที่ใช้งานอยู่ คาดว่าการใส่เกมแพด
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

เมื่อสคริปต์ UserInputModule อยู่ในตําแหน่งแล้วใช้ตัวอย่างโค้ดต่อไปนี้ใน LocalScript พิมพ์:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- ต้องการโมดูล
local UserInputModule = require(ReplicatedStorage:WaitForChild("UserInputModule"))
local currentUserInput, inputEnum = UserInputModule.getInputType()
print(currentUserInput, inputEnum)