모바일 입력

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

모든 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)