모든 Roblox 세션의 절반 이상이 모바일 장치에서 재생되므로 광범위한 대상을 위한 경험을 디자인할 때 크로스 플랫폼 액세스성을 고려하는 것이 중요합니다.마우스 및 키보드 입력 과 게임패드를 포함하여 다양한 입력 장치를 지원하도록 노력해야 합니다.
모바일 경험을 디자인할 때 사용자가 경험에서 사용할 것으로 예상되는 장치 방향을 고려하고, 입력을 ContextActionService로 구현하여 다음 모바일 관련 입력 작업을 수행합니다.
- 화면 버튼 생성 모바일 장치에서만 표시됩니다.
- 상황에 따라 동일한 버튼이나 입력이 다른 작업을 수행할 수 있는 컨텍스트 종속 입력을 설정하여 상황에 따라 동일한 버튼이나 입력이 다른 작업을 수행할 수 있습니다.
장치 방향
휴대폰과 태블릿에서 장치 방향은 주로 사용자 경험과 상호 작용에 영향을 줍니다.예를 들어, 풍경 모드는 두 손가락으로 작동하는 것이 가장 좋지만, 포트레이트 모드는 한 손가락 인터페이스에 적합할 수 있습니다.
기본적으로 Roblox 경험은 풍경 모드에서 실행되며, 사용자의 장치가 회전함에 따라 경험이 풍경 "왼쪽"과 풍경 "오른쪽" 사이를 전환할 수 있습니다.그러나 원하는 경우 경험을 특정 방향으로 잠길 수 있습니다.
방향 모드
센서 기반 모드 2개와 잠금 모드 3개를 포함하여 5가지 다른 방향 모드가 있습니다.
센서 모드 | |
---|---|
풍경 센서 | 경험이 항상 풍경 모드에 표시되고 기기가 경험 뷰가 항상 위쪽으로 향하도록 물리적 방향을 감지하는 기본 Roblox 설정(초상 모드 없음). |
센서 | 장치는 경험 뷰가 항상 위쪽으로 향하도록 물리적 방향을 감지하여 필요에 따라 풍경 및 포트레이트 모드 간에 전환합니다. |
잠긴 모드 | |
---|---|
왼쪽 풍경 | 물리적 홈 버튼이 있는 장치에서 홈 버튼은 디스플레이 왼쪽에 있습니다.가상 홈/탐색 바가 있는 장치에서 터치 영역은 디스플레이 하단에 있습니다. |
풍경 오른쪽 | 물리적 홈 버튼이 있는 장치에서 홈 버튼은 디스플레이 오른쪽에 있습니다.가상 홈/탐색 바가 있는 장치에서 터치 영역은 디스플레이 하단에 있습니다. |
초상 | 물리적 홈 버튼이 있는 장치에서는 홈 버튼이 디스플레이 아래에 있습니다.가상 홈/탐색 바가 있는 장치에서 터치 영역은 디스플레이 하단에 있습니다. |
방향 속성
방향을 설정할 때 시작 방향 , 경험 내 방향 및 현재 방향 을 설정할 수 있습니다.
시작 오리엔테이션
StarterGui.ScreenOrientation 는 플레이스기본 방향을 설정합니다. 허용 가능한 값에는 다음이 포함됩니다:
이 속성은 경험에 참여하는 모든 새 사용자에게 영향을 미치기 때문에 Studio 내에서 → → 에서 값을 설정할 수 있습니다.
경험 내 지향성
PlayerGui.ScreenOrientation 사용자를 위해 경험의 방향을 명시적으로 변경합니다.이 속성이 열거형 중 하나로 설정되면 경험은 즉시 설정에 맞게 조정됩니다.미니게임에서 뷰를 포트레이트로 잠그는 등의 특정 경험을 제공해야 하는 경우 유용할 수 있습니다.
다음 코드 샘플에서 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
StarterPlayer.DevTouchMovementMode 의 값을 팔로잉중 하나로 변경하여 Roblox 경험에 대한 모바일 이동 제어 스키마를 설정할 수 있습니다.
옵션 | 설명 |
---|---|
ClickToMove | 사용자는 대상 위치를 탭하여 경험을 이동할 수만 있습니다.이 모드에는 화면의 오른쪽 하단 영역에 점프 버튼이 포함됩니다.자동 점프는 항상 이 이동 모드에서 활성화됩니다. |
DPad | |
DynamicThumbstick | 사용자가 처음 누르는 곳에 동적 썸버스틱이 나타납니다.이 모드에는 화면의 오른쪽 하단 영역에 점프 버튼이 포함됩니다.이는 UserChoice가 설정되어 있으면 모바일 사용자의 기본 사용자 설정입니다. |
Scriptable | 모든 기본 컨트롤을 비활성화하고 자신의 컨트롤 스키마를 스크립트할 수 있게 합니다. |
Thumbpad | |
Thumbstick | 화면의 왼쪽 하단 영역에 위치한 모바일 썬더스틱.DynamicThumbstick 와는 달리, 썸스틱 위치는 정적이며 사용자가 화면을 터치하면 위치가 변경되지 않습니다. |
UserChoice | 사용자가 경험 내 설정 메뉴에서 원하는 컨트롤 스키마를 선택할 수 있도록 합니다. 이는 경험의 기본 이동 모드입니다. |
자동 점프
StarterPlayer.AutoJumpEnabled)가 활성화되면 사용자의 캐릭터가 플랫폼 가장자리에 접근할 때 공백을 자동으로 뛰어넘습니다.StarterPlayer.AutoJumpEnabled는 기본적으로 모바일 장치에 대해 활성화되어 있습니다.
이 기능을 비활성화하고 사용자가 키 바인딩만 사용하여 점프하도록 강제하려면 StarterPlayer.AutoJumpEnabled를 비활성화하십시오.
사용자 지정 모바일 버튼
사용자 지정 모바일 버튼을 추가하려면 다음 매개변수를 사용하는 ContextActionService:BindAction() 메서드를 사용하십시오:
매개 변수 | 유형 | 설명 |
---|---|---|
actionName | 문자열 | 바인딩하는 작업의 식별자 문자열. ContextActionService 에서 다른 함수와 함께 actionName을 사용하여 바인딩을 편집할 수 있습니다. |
functionToBind | 함수 | 지정된 입력이 트리거될 때 호출할 함수. 이 함수는 세 가지 인수를 받습니다:
|
createTouchButton | 부울 | 참여 시, 모바일 기기게임이 실행될 때 화면에 버튼을 생성합니다. |
inputTypes | 튜플 | 함수에 바인딩할 예정인 입력, 예를 들어 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() 메서드를 호출하여 아래의 예제 자산 ID를 선택한 이미지로 교체하십시오.
- 버튼의 위치를 설정하려면 SetPosition() 위치 값으로 UDim2 를 호출하십시오.
-- 버튼 레이블을 "대화"로 설정ContextActionService:SetTitle("Interact", "Talk")-- 버튼 이미지 설정ContextActionService:SetImage("Interact", "rbxassetid://104919049969988")-- 버튼 위치 설정ContextActionService:SetPosition("Interact", UDim2.new(1, -70, 0, 10))
컨텍스트 종속 입력
모바일 장치를 개발할 때 컨텍스트에 따라 단일 버튼이 수행하는 작업을 자주 변경하려는 경우가 있습니다.모바일 장치의 화면 공간이 제한되어 있으므로 캐릭터가 수행할 수 있는 작업에 따라 상황에 맞는 버튼을 사용하십시오.
예를 들어, 사용자가 금 상자 근처에 서서 함수 에 바인딩되어 있을 때 활성 "수집" 버튼을 표시할 수 있습니다.
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 근처에 서 있을 때 "대화" 버튼을 변경할 수 있습니다.기존 버튼을 제거하고 다른 버튼을 배치하는 대신, 기존 "Interact"에서 BindAction()하여 대상 함수와 버튼 제목을 변경할 수 있습니다.
ContextActionService:BindAction("Interact", talkToNPC, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)ContextActionService:SetTitle("Interact", "Talk")
다른 장치 감지
크로스 플랫폼 경험에서는 활성으로 사용되는 기기대한 입력 옵션을 표시하여 사용자의 기본 입력 옵션을 참조하는 것이 중요합니다.예를 들어, 모바일 장치에는 마우스와 키보드 또는 게임패드 가 연결되어 있거나, 데스크톱에 터치스크린이 활성화되어 있을 수 있습니다.여러 입력 소스가 활성화되어 있으면 GetLastInputType()를 사용하여 사용자의 마지막으로 사용된 입력 기기가져올 수 있습니다.
기본으로, 다음 ModuleScript 를 사용하여 ReplicatedStorage 내에 배치하고 사용자 입력 모듈 로 이름을 변경하여 사용자의 입력 유형을 가져온 후 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)