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