모든 Roblox 세션의 약 절반이 모바일 장치에서 재생되므로 다양한 플랫폼 접근성을 고려하는 것이 중요합니다. 경험을 넓은 대상에게 디자인할 때 마우스 및 키보드 입력 및 게임 패드 를 포함한 다양한 입력 장치를 지원하는 것이 좋습니다.
모바일 경험을 설계할 때 사용자가 경험에서 사용할 장치 지향성을 고려한 다음 입력 장치를 구현하기 위해 Class.ContextActionService 를 사용하여 다음 모바일 관련 입력 작업을 수행하십시오.
장치 지향
휴대 전화 및 태블릿에서 장치 지향은 사용자 경험 및 상호 작용에 크게 영향을 미칩니다. 예를 들어, 풍경 모드는 두 싫어요 모드는 하나의 싫어요 인터페이스에 최적화 될 수 있습니다.
기본적으로 Roblox 경험은 풍경 모드로 실행되며, 사용자 장치가 회전하는 경우 풍경 왼쪽과 풍경 오른쪽 사이를 전환하는 경험을 切换할 수 있습니다. 그러나 원하는 경우 경험을 특정 방향으로 고정할 수 있습니다.
지향 모드
센서 기반 모드와 잠긴 모드가 있는 다섯 가지 방향 모드가 있습니다.
센서 모드 | |
---|---|
지형 센서 | 기본 Roblox 설정에 따르면 경험이 항상 풍경 모드로 표시되고 장치가 항상 장치 방향으로 물리적 방향을 감지하여 경험 뷰가 항상 위쪽으로 표시됩니다. |
센서 | 장치는 시야가 항상 위쪽으로 향할 수 있도록 물리적 방향을 감지하고 필요에 따라 풍경 및 초상 모드를 전환합니다. |
잠긴 모드 | |
---|---|
왼쪽 경치 | 물리적 홈 버튼이 있는 장치에서 홈 버튼은 디스플레이의 왼쪽에 있습니다. 가상 홈/탐색 바가 있는 장치에서 홈 버튼의 터치 영역은 디스플레이 하단에 있습니다. |
경치 오른쪽 | 물리적 홈 버튼이 있는 장치에서 홈 버튼은 표시 오른쪽에 있습니다. 가상 홈/탐색 바가 있는 장치에서 탐색 영역은 표시 하단에 있습니다. |
초상화 | 물리적 홈 버튼이 있는 장치에서 홈 버튼은 표시 아래에 있습니다. 가상 홈/탐색 바가 있는 장치에서 탐색 영역은 표시 아래에 있습니다. |
지향 속성
방향을 설정할 때 시작 방향, 경험 방향, 그리고 현재 방향을 설정할 수 있습니다.
시작 지향
StarterGui.ScreenOrientation 플레이스대한 기본 지향을 설정합니다. 지원 가능한 값은 다음과 같습니다.
이 속성은 경험에 새로운 사용자가 모두 참여하므로 값을 StarterGui 내 Enum.ScreenOrientation 에 설정할 수 있습니다.
경험 내 지향성
PlayerGui.ScreenOrientation 은 사용자에게 경험의 방향을 명시적으로 변경합니다. 이 속성이 Class.LocalScript의 Enum.ScreenOrientation 중 하나로 설정되면 경험은 즉시 설정과 일치하게 정렬됩니다. 이를 사용하면 미니
Class.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 과는 달리 썬더 스틱 위치는 정적이며 사용자가 화면을 터치할 때 위치가 변경되지 않습니다. |
UserChoice | 사용자가 경험 내 설정 메뉴에서 원하는 제어 메커니즘을 선택할 수 있습니다. 이는 경험의 기본 이동 모드입니다. |
자동 점프
Class.StarterPlayer.AutoJumpEnabled 가 활성화되면 사용자의 캐릭터가 플랫폼 엣지에 다가갈 때 자동으로 간격을 뛰어넘습니다. StarterPlayer.AutoJumpEnabled는 모바일 장치에서 기본적으로 활성화됩니다.
Class.StarterPlayer.AutoJumpEnabled를 비활성화하여 이 기능을 비활성화하고 사용자가 키 바인딩만 사용하도록 강제합니다.
모바일 버튼 추가
모바일 버튼을 추가하려면 ContextActionService:BindAction() 메서드를 사용하십시오.
Class.ContextActionService:BindAction()|BindAction() 메서드는 다음 매개 변수를 사용합니다.
매개 변수 | 유형 | 설명 |
---|---|---|
동작 이름 | 문자열 | 바인딩할 액션의 식별자 문자열입니다. 액션Name을 사용하여 ContextActionService에서 액션을 편집하고 바인딩을 편집할 수 있습니다. |
함수 바인딩 | 함수 | 지정된 입력이 트리거될 때 호출할 함수입니다. 이 함수는 세 가지 인수를 받습니다.
|
생성TouchButton | 부울 | 진실로 하면 게임이 모바일 기기실행될 때 화면 버튼을 만듭니다. |
입력 유형 | 튜토리얼 | 함수에 바인딩할 입력, 예를 들어 Enum.KeyCode 값. |
다음 코드 샘플을 사용하여 화면 버튼을 생성하고 키보드 및 게임 패드 입력을 수락하는 상호 작용 액션을 생성할 수 있습니다.You can use the following code sample to create an Interact action that creates an on-screen button and also accepts a keyboard and gamepad input:
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() 을 사용하여 액션Name 문자열을 사용하여 BindAction() 에 대한 바인딩을 해제하십시오.
이전에 만든 상호 작용 액션을 해제하려면 다음 코드 샘플을 사용하십시오.
-- 이름별 액션 해제ContextActionService:UnbindAction("Interact")
버튼 UI 사용자 정의
Class.ContextActionService의 여러 함수를 사용하여 생성된 온-스크린 버튼을 BindAction()를 통해 사용자 정의할 수 있습니다.
버튼 텍스트
모바일 버튼에 대한 텍스트 레이블을 변경하려면 SetTitle() 에 액션 이름 문자열과 타이틀을 호출하십시오.
-- 버튼 레이블에 "말하기" 설정ContextActionService:SetTitle("Interact", "Talk")
버튼 이미지
모바일 버튼은 SetImage() 메서드를 사용하여 사용자 정의 이미지를 사용할 수 있습니다.
다음 샘플 코드를 사용하여 버튼 이미지를 설정하고 자산 ID를 이미지 선택의 이미지로 대체합니다.
-- 버튼 이미지 설정ContextActionService:SetImage("Interact", "rbxassetid://0123456789")
버튼 위치
기본적으로 새 버튼의 위치는 화면의 오른쪽 하단 섹션 근처에 나타납니다. 모바일 장치에서 버튼 배치를 신중하게 고려하고 싫어요 버튼 배치에 대한 손가락과 손가락의 위치를 유지하십시오.
다음 샘플 코드를 사용하여 SetPosition() 메서드로 버튼의 위치를 설정합니다.
-- 버튼 위치 설정ContextActionService:SetPosition("Interact", UDim2.new(1, -70, 0, 10))
컨텍스트 입력
모바일 장치에서 개발할 때 컨텍스트에 따라 단일 버튼이 작동하는 방식을 변경하는 경우가 종종 발생합니다. 모바일 장치의 화면 공간이 제한되기 때문에 캐릭터가 수행할 수 있는 다양한 작업에 대해 컨텍스트 버튼을 사용하십시오.
예를 들어, 사용자가 금 상자 근처에 서 있을 때 활성화된 "수집" 버튼을 표시할 수 있습니다.
다음 코드 샘플을 사용하여 "Collect"라는 이름의 모바일 버튼을 작성하고 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:SetPosition("Interact", UDim2.new(1, -70, 0, 10))
-- 이미지를 파란색 "수집" 버튼으로 설정
ContextActionService:SetImage("Interact", "rbxassetid://0123456789")
게임의 다른 시점에서 사용자가 NPC 근처에 서 있을 때 버튼을 "Talk"로 변경할 수 있습니다. 기존 버튼을 추가하고 제거하는 대신 단순히 인터랙트 액션에 ContextActionService:BindAction()를 사용하여 함수 및 버튼 이미지를 변경할 수 있습니다.
다음 코드 샘플을 사용하여 기존 버튼 레이블을 "Talk"로 설정하고 talkToNPC()라는 함수에 바인딩하십시오.
ContextActionService:BindAction("Interact", talkToNPC, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)-- 이미지를 노란색 "Talk" 버튼으로 설정ContextActionService:SetImage("Interact", "rbxassetid://0011223344")
다른 장치 감지
크로스 플랫폼 경험에서는 사용자의 현재 장치를 알아야 하여 UI 및 표시 키 바인딩 프롬프트를 조정하는 데 필요합니다.
예를 들어, 사용자가 보물 상자에 다가가고 금을 수집하는 작업이 있는 경우 모바일 사용자에게 화면에서 "수집" 버튼을 표시하고 데스크톱 사용자에게는 "T" 키 아이콘을 표시할 수 있습니다.
모바일 장치에는 또한 마우스 및 키보드 또는 게임 패드가 연결되어 있을 수 있습니다. 또한 컴퓨터 데스크톱에는 touchscreen가 활성화되어 있을 수 있습니다. 활성화된 기기패드를 참조하려면 사용자의 선호 입력 옵션
이러한 경우 UserInputService 를 사용하여 어떤 입력 장치가 활성화되었는지 감지할 수 있습니다. 여러 개의 입력 장치가 활성화되어 있으면 UserInputService:GetLastInputType() 를 사용하여 사용자의 마지막 사용된 입력 장치를 표시하려면 UI에 표시됩니다.
Class.ReplicatedStorage 내에 배치된 다음 ReplicatedStorage 를 사용하여 사용자의 입력 유형을 검색한 후 사용자 입력 모듈 으로 이름을 변경할 수 있습니다. 이렇게 하면 사용자 입력 유형을 사용자의 경험에 적용할 수 있습니다.
다음 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)