ผู้ใช้ส่วนใหญ่เล่น Roblox บนอุปกรณ์มือถือดังนั้นจึงเป็นเรื่องสำคัญที่จะพิจารณาความพร้อมใช้งานบนแพลตฟอร์มครอสแพลตฟอร์มเมื่อออกแบบประสบการณ์สำหรับผู้ชมวงกว้าง คุณควรเล
เมื่อออกแบบประสบการณ์มือถือ โปรดพิจารณา การจัดเค้าโครงอุปกรณ์ ที่คุณตั้งใจว่าผู้ใช้จะใช้ในประสบการณ์ของคุณ จากนั้นให้ใส่ใจกับการปรับแต่งปุ่มของคุณด้วย ContextActionService เพื่
- สร้างปุ่มบนหน้าจอ มองเห็นได้เฉพาะบนอุปกรณ์มือถือเท่านั้น
- การตั้งค่าคอนเท็กส์ที่ขึ้นอยู่ ที่สามารถทำให้ปุ่มหรือการป้อนข้อมูลที่แตกต่างกันได้ขึ้นอยู่กับสถานการณ์
การจัดเค้าโครงอุปกรณ์
ในโทรศัพท์และแท็บเล็ต การจัดเค้าโครงอุปกรณ์ส่วนใหญ่จะมีผลต่อประสบการณ์ผู้ใช้และการใช้งาน เช่น โหมดแนวตั้งเหมาะกับการใช้งานด้วยนิ้วสองข้างของผู้ใช้สองคน ในขณะที่โหมดแนวนอนเหมาะกับการใช้งานด
โดยปกติ, Roblox experiences จะทำงานในโหมดภาพลานจากนั้นสามารถเปลี่ยนระหว่างภาพลานซ้าย และภาพลานขวาของอุปกรณ์ของผู้ใช้ได้ตามที่อุปกรณ์ของผู้ใช้หมุนได้ อย่างไรก็ตาม, สามารถล็อคไปยังการตั้งค่าที่กำหนดไ
โหมดการจัดเรียง
มีห้าโหมดการจัดเรียงที่แตกต่างกันรวมถึงโหมดเซ็นเซอร์และสามโหมดล็อค
โหมดเซ็นเซอร์ | |
---|---|
เครื่องวัดภาพลังทางอากาศ | การตั้งค่า Roblox เริ่มต้นในขณะที่ประสบการณ์มักจะปรากฏในโหมดภาพลังธรรมดา (ไม่มีโหมดพอร์ตเทรต) และอุปกรณ์ตรวจจับตำแหน่งทางกายภาพของอุปกรณ์เพื่อให้แน่ใจว่ามุมมองของประสบการณ์เสมอเป็นมุมมองขึ้น |
เซ็นเซอร์ | อุปกรณ์ตรวจจับตำแหน่งทางกายภาพของมันเพื่อให้แน่ใจว่ามุมมองของประสบการณ์จะเป็นไปในทิศทางขึ้นเสมอเพื่อเปลี่ยนระหว่างโหมดภาพลักษณ์และภาพเลี้ยงตามความต้องการ |
โหมดที่ล็อค | |
---|---|
ซ้ายสวน | ในอุปกรณ์ที่มีปุ่มหน้าบ้านทางกายภาพปุ่มหน้าบ้านอยู่ทางซ้ายมือของหน้าจอ ในอุปกรณ์ที่มีแถบเมนูหน้าบ้าน/เส้นทาง สัมผัสของมันอยู่ด้านล่างของหน้าจอ |
ฉากขวา | ในอุปกรณ์ที่มีปุ่มหน้าบ้านทางกายภาพปุ่มหน้าบ้านอยู่ทางด้านขวาของหน้าจอ ในอุปกรณ์ที่มีแถบเมนูหน้าบ้าน/เส้นทาง สัมผัสของมันอยู่ที่ด้านล่างของหน้าจอ |
ตัวอักษร | ในอุปกรณ์ที่มีปุ่มหน้าบ้านทางกายภาพปุ่มหน้าบ้านอยู่ด้านล่างของหน้าจอ ในอุปกรณ์ที่มีแถบเมาส์เสมือนที่อยู่ด้านล่างของหน้าจอ |
สร้างระเบียง
เมื่อการตั้งทิศทาง คุณสามารถตั้ง การเริ่มต้นทิศทาง และ การเริ่มต้นทิศทางในประสบการณ์ และ การเริ่มต้นทิศทางปัจจุบัน
เริ่มการจัดเรียง
StarterGui.ScreenOrientation ตั้งค่าการจัดเรียงพื้นที่เริ่มต้นสำหรับสถานที่ รายการที่ยอมรับได้รวมถึง:
เนื่องจากค่านี้ส่งผลกระทบต่อผู้ใช้ใหม่ทั้งหมดที่เข้าร่วมประสบการณ์, คุณสามารถตั้งค่ามันใน StarterGui → Enum.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 เพื่อแก้ไขการผูก |
ระบุคุณสมบัติ | ฟังก์ชัน | หน้าต่างที่เรียกเมื่อปุ่มที่กำหนดถูกเรียก หน้าต่างนี้รับสามอาร์กุตติ:
|
สร้างปุ่มแสดงผล | บูลีน | เมื่อใช่สิ่งนี้จะสร้างปุ่มบนหน้าจอเมื่อเกมกำลังดำเนินการบนอุปกรณ์มือถือ |
ใส่ชนิด | คํา | การป้อนที่คุณตั้งใจจะผูกกับฟังก์ชันเช่นค่ารายการจาก 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
ในกรณีเหล่านี้คุณสามารถใช้ 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)