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

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

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

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

การจัดเค้าโครงอุปกรณ์

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

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

โหมดการจัดเรียง

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

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

สร้างระเบียง

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

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

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

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

การนำทางในประสบการณ์

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

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


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

การจัดเรียงในปัจจุบัน

PlayerGui.CurrentScreenOrientation รับการจัดเตรียมเครื่องของปัจจุบัน สามารถใช้ได้กับมูลค่าต่างๆ เช่น:

รหัสต่อไปนี้พิมพ์การตั้งค่าอrientation ของหน้าจอของผู้ใช้:


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 ไม่ได้ตั้งอยู่ในตำแหน่งเดิม ตำแหน่งปุ่มชีพจรจะคงที่และไม่เปลี่ยนแปลงตำแหน่งเมื่อผู้ใช้สัมผัสกับหน้า
UserChoiceให้ผู้ใช้เลือกระบบการควบคุมที่ต้องการจากเมนูการตั้งค่าในประสบการณ์ นี่คือโหมดการเคลื่อนที่เริ่มต้นสำหรับประสบการณ์

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

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

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

การเพิ่มปุ่มมือถือ

เพื่อเพิ่มปุ่มมือถือให้ใช้วิธีการ ContextActionService:BindAction()

วิธี BindAction() ใช้ปารามิเตอร์ต่อไปนี้:

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

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


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)

การลบปุ่มบนมือถือ

เพื่อลบปุ่มมือถือออกจากหน้าจอ โปรดใช้ UnbindAction() โดยใช้สตริง actionName ที่คุณส่งให้ BindAction()

แอ็คชัน:


-- ยกเลิกการผูกโดยชื่อ
ContextActionService:UnbindAction("Interact")

การปรับแต่ง UI ปุ่ม

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

ข้อความปุ่ม

เพื่อเปลี่ยนแท็กข้อความสำหรับปุ่มมือถือ โทร SetTitle() ด้วยสตริง actionName และชื่อเรื่อง:


-- ตั้งชื่อปุ่มให้เป็น "พูดคุย"
ContextActionService:SetTitle("Interact", "Talk")

รูปปุ่ม

ปุ่มมือถือสามารถใช้รูปภาพที่กำหนดเองเช่นปุ่ม GUI อื่น ๆ โดยใช้วิธี SetImage()

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


-- ตั้งค่ารูปภาพปุ่ม
ContextActionService:SetImage("Interact", "rbxassetid://0123456789")

ตำแหน่งปุ่ม

ตามปกติ, ตำแหน่งปุ่มใหม่จะปรากฏอยู่ใกล้ส่วนล่างขวาของหน้าจอ คุณควรพิจารณาการวางตำแหน่งปุ่มบนอุปกรณ์มือถืออย่างระมัดระวังและคุณควรให้ความสนใจกับตำแหน่งของนิ้วและมือ

ใช้ตัวอย่างโค้ดต่อไปนี้เพื่อตั้งตำแหน่งปุ่มด้วยวิธี SetPosition()


-- ตั้งต้นตำแหน่งปุ่ม
ContextActionService:SetPosition("Interact", UDim2.new(1, -70, 0, 10))

การป้อนข้อมูลที่ขึ้นอยู่กับบริบท

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

เช่นเดียวกับการแสดงปุ่ม "เก็บ" ที่ใช้งานอยู่เมื่อผู้ใช้อยู่ใกล้กับหีบทอง:

ใช้ตัวอย่างรหัสต่อไปนี้เพื่อสร้างปุ่มมือถือที่มีชื่อว่า "Collect" และเชื่อมโยงกับคุณสมบัติเก็บสมบัติ:


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))
-- ตั้งรูปให้สีฟ้า "เก็บ" ปุ่ม
ContextActionService:SetImage("Interact", "rbxassetid://0123456789")

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

ใช้ตัวอย่างรหัสต่อไปนี้เพื่อตั้งป้ายปุ่มที่มีอยู่เป็น "พูดคุย" และผูกกับฟังก์ชันที่มีชื่อว่า talkToNPC():


ContextActionService:BindAction("Interact", talkToNPC, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)
-- ตั้งรูปให้เป็นสีเหลือง "พูดคุย" ปุ่ม
ContextActionService:SetImage("Interact", "rbxassetid://0011223344")

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

ในประสบการณ์แพลตฟอร์มข้าม จำเป็นต้องรู้อุปกรณ์ปัจจุบันของผู้ใช้เพื่อปรับปรุง UI และแสดงผลการตั้งค่าการผูกกุญแจที่ถูกต้อง

เช่นเดียวกับตัวอย่าง, หากผู้ใช้เข้าใกล้หีบสมบัติและมีการกระทําที่เกี่ยวข้องกับการเก็บทองคํา, คุณสามารถแสดงผู้ใช้มือถือปุ่ม "Collect" บนหน้าจอและไอคอน "T" บนหน้าจอของผู้ใช้ที่เชื่อมต่อ

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

PC
มือถือ

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

คุณสามารถใช้ต่อไปนี้ ModuleScript ซึ่งตั้งอยู่ภายใน ReplicatedStorage และเปลี่ยนชื่อเป็น UserInputModule พิมพ์

ใช้ต่อไปนี้ ModuleScript เพื่อตรวจสอบว่ามีการเปิดใช้งานอุปกรณ์ป้อนข้อมูลหรืออุปกรณ์ป้อนล่าสุดที่ใช้:


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)