Wejście mobilne

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Ponad połowa wszystkich sesji Roblox odbywa się na urządzeniach mobilnych, więc ważne jest, aby rozważyć dostępność na platformach krzyżowych podczas projektowania doświadczenia dla szerokiej widowni. Powinieneś celować w duktylarność różnych urządzeń wejścia, w tym myszka i klawiatura i sterowanie.

Projektując doświadczenie mobilne, rozważ orientację urządzenia, którą zamiierz użytkownik w swoim doświadczeniu, a następnie wdroż w swoich wejściach za pomocą ContextActionService, aby wykonać następujące zadania w ramach mobilnych:

Oriенacja urządzenia

Na telefonach i tabletach orientacja urządzenia znacznie wpływa na doświadczenie użytkownika i interakcję. Na przykład tryb krajobrazowy jest najlepiej zarządzany za pomocą dwóch palców, podczas gdy tryb portretowy może być zarządzany za pomocą jednego palca.

Domyślnie doświadczenia Roblox działają w trybie krajobrazu, umożliwiając wymianę doświadczeń pomiędzy krajobrazem "lewym" i krajobrazem "prawym", jak tarcza rotuje. Można jednak zablokować doświadczenia dla określonej orientacji, jeśli tego życzy.

Tryby Orientacji

Są pięć różnych trybów orientacji, w tym dwa tryby oparte na czujnikach i trzy zamknięte tryby.

Tryby czujników
Czujnik krajobrazuDomyślne ustawienia Roblox, w których doświadczenie zawsze pojawia się w trybie krajobrazu (nie w trybie portretu), a urządzenie wykrywa jego orientację fizyczną, aby upewnić się, że widok doświadczenia zawsze jest skierowany w górę.
CzujnikUrządzenie wykrywa swoją fizyczną orientację, aby zapewnić, że widok doświadczenia zawsze jest skierowany w górę, przełączając się między trybem krajobrazu i portretu, jeśli to konieczne.
Zablokowane tryby
Lewy krajobrazNa urządzeniach z fizycznym przyciskiem głównym przyciskiem jest po lewej stronie ekranu. Na urządzeniach z wirtualnym przyciskiem głównym jego region dotykowy znajduje się w dolnej części ekranu.
Prawe PodświetlenieNa urządzeniach z fizycznym przyciskiem głównym przyciskiem jest po prawej stronie ekranu. Na urządzeniach z wirtualnym przyciskiem głównym jego region dotykowy znajduje się w dolnej części ekranu.
PortretNa urządzeniach z fizycznym przyciskiem głównym przycisk główny jest poniżej ekranu. Na urządzeniach z wirtualną przyciskiem głównym/nav bar, jego obszar dotyku jest w dolnej części ekranu.

Właściwości orientacji

Podczas ustawiania orientacji możesz ustawić Rozpoczęcie orientacji, In-Experience Orientation i Current Orientation.

Początkowe Orientacje

StarterGui.ScreenOrientation ustawia domyślną orientację dla miejsce. Dostępne wartości to:

Ponieważ ta właściwość dotyczy wszystkich nowych użytkowników, którzy doświadczenie dołączają, możesz ustawić jego wartość w StarterGuiEnum.ScreenOrientation w Studio.

Oriенacja w przypadku doświadczenia

PlayerGui.ScreenOrientation wyraźnie zmienia orientację doświadczenia dla użytkownika. Gdy ta właściwość jest ustawiona na jeden z Enum.ScreenOrientation enums w LocalScript, doświadczenie natychmiastowo orientuje się, aby pasować do ustawienie. To może być użyteczne, gdy doświad

Poniższy kod przykładu w LocalScript ustawia orientację ekranu na portret:


local Players = game:GetService("Players")
local playerGUI = Players.LocalPlayer:WaitForChild("PlayerGui")
task.wait(2)
playerGUI.ScreenOrientation = Enum.ScreenOrientation.Portrait

Obecna Orientacja

PlayerGui.CurrentScreenOrientation dostaje obecną orientację urządzenia. Możliwe wartości to:

Poniższy kod drukuje obecną orientację ekranu użytkownika:


local Players = game:GetService("Players")
local playerGUI = Players.LocalPlayer:WaitForChild("PlayerGui")
print(playerGUI.CurrentScreenOrientation)

Tryby przemieszczania znaków

Roblox oferuje kilka StarterPlayer właściwości, które możesz ustawić, aby zmienić sposób, w jaki użytkownicy na urządzeniach mobilnych mogą przesuwać się przez twoje doświadczenie.

Możesz ustawić modele sterowania ruchem mobilnym dla doświadczeń Roblox, zmieniając wartości StarterPlayer.DevTouchMovementMode do jednej z obserwuje:

OpcjaOpis
ClickToMoveUżytkownicy mogą poruszać się tylko poprzez doświadczenie, klikając lokalizację docelową. Ta funkcja zawiera przycisk skoku w dolnej prawnej części ekranu. Automatyczny skok jest zawsze aktywny w tym trybie ruchu.
DPad
DynamicThumbstickPojawia się dynamiczny joystick, na którym użytkownik początkowo nacisnąć w dół. Ta trybica zawiera przycisk skoku w dolnej prawnej regionie ekranu. Jest to domyślna ustawienie użytkownika dla użytkowników mobilnych, jeśli UserChoice jest ustawiać.
ScriptableWyłącza wszystkie domyślne sterowanie i pozwala ci skrypcować własny schemat sterowania.
Thumbpad
ThumbstickPrzenośny joystick położony w lewym dolnym regionie ekranu. W przeciwieństwie do DynamicThumbstick , pozycja joysticka jest statyczna i nie zmienia się pozycja, gdy użytkownik dotyka ekranu.
UserChoiceUmożliwia użytkownikom wybór dowolnego schematu kontroli z menu Ustawień w trybie bez doświadczenia. To jest domyślny tryb ruchu dla doświadczeń.

Automatyczny Skok

Gdy StarterPlayer.AutoJumpEnabled jest włączony, automatycznie skacz postać użytkownika w przestrzeniach, gdy zbliża się krawędź platforma. StarterPlayer.AutoJumpEnabled jest włączony domyślnie dla urządzeń mobilnych.

Wyłącz StarterPlayer.AutoJumpEnabled , aby wyłączyć tę funkcję i zmusić użytkowników do skaczania tylko za pomocą ich wiązań klawiaturowych.

Dodawanie przycisków mobilnych

Aby dodać przyciski mobilne, użyj metody ContextActionService:BindAction().

Methode BindAction() przyjmuje następujące parametry:

ParametrTypOpis
nazwaAkcjiciągString identyfikatora dla akcji, do której wiążesz. Możesz użyć akcjaName z innymi funkcjami w ContextActionService , aby edytować wiążące.
funkcjaDoBindfunkcjaFunkcja do wzywania, gdy określony wejście jest włączone. Ta funkcja otrzymuje trzy argumenty:
  • Strona równa się actionName.
  • A Enum.UserInputState , który określa stan wejścia, gdy wzywa funkcję.
  • Przedmiot InputObject używany w wezwaniu funkcji.
utwórzPrzycisk dotykowybooleanGdy prawda, tworzy przycisk na ekranie, gdy gra jest uruchomiona na urządzeniemobilnym.
輸入TypetuplWejścia, które chcesz związać z funkcją, takie jak wartości listy Enum.KeyCode .

Możesz użyć poniższego kodu przykładu, aby stworzyć akcję interakcji, która tworzy przycisk na ekranie i akceptuje również klawiaturę i gry wpisy:


local ContextActionService = game:GetService("ContextActionService")
local function handleAction(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print(actionName, inputObject)
end
end
-- Zwiąż funkcję
ContextActionService:BindAction("Interact", handleAction, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)

Usuwanie przycisków mobilnych

Aby usunąć mobilny przycisk z ekranu, wezwij Class.ContextActionService:UnbindAction()|UnbindAction() używającą strungi actionName, którą przekazałeś do Class.ContextActionService:BindAction()|BindAction().

Użyj poniższego przykładu kodu, aby odłączyć wcześniej stworzoną akcjiInteract:


-- Odzwiąż akcję według imienia
ContextActionService:UnbindAction("Interact")

Personalizowanie interfejsu użytkownika

Możesz użyć jednej z kilku funkcji z ContextActionService , aby dostosować przyciski na ekranie, które są tworzone przez BindAction() .

Tekst przycisku

Aby zmienić etykietę tekstową dla przycisku mobilnego, wezwij SetTitle() z wartością akcji i tytułem:


-- Ustaw label przycisku na „Rozmawiaj”
ContextActionService:SetTitle("Interact", "Talk")

Zdjęcie przycisku

Przyciski mobilne mogą używać niestandardowych obrazów tak jak inne przyciski GUI używając metody SetImage().

Użyj poniższego przykładowego kodu, aby ustawić obraz przycisku, zastępując ID zasobu obrazem swojego wyboru:


-- Ustaw obraz przycisku
ContextActionService:SetImage("Interact", "rbxassetid://0123456789")

Pozycja przycisku

Domyślnie pozycja nowego przycisku pojawia się w pobliżu dolnej prawnej części ekranu. Powinieneś uważać na umieszczenie przycisku na urządzeniach mobilnych i pamiętać o pozycjach palców i rąk.

Użyj poniższego kodu przykładowego, aby ustawić pozycję przycisku za pomocą metody SetPosition() :


-- Ustaw pozycję przycisku
ContextActionService:SetPosition("Interact", UDim2.new(1, -70, 0, 10))

Zależne od kontekstu wpisy

Rozwija się na urządzeniach mobilnych zazwyczaj chcesz zmienić, co robi jeden przycisk w zależności od kontekstu. Ponieważ przestrzeń ekranu na urządzeniach mobilnych jest ograniczona, użyj przycisków kontekstowych, które wykonują różne akcje w zależności od tego, co może zrobić postać.

Na przykład możesz wyświetlić aktywny przycisk "Zbierz", gdy użytkownik stoi blisko skrzyni złota:

Użyj poniższego przykładu kodu, aby stworzyć mobilny przycisk o nazwie "Zbierz" i związany z funkcją 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))
-- Ustaw obraz na niebieski przycisk "Zbierz"
ContextActionService:SetImage("Interact", "rbxassetid://0123456789")

W innym momencie w gramożesz zmienić przycisk „Rozmawiaj”, gdy użytkownik stoi blisko NPC. Zamiast dodać i usunąć istniejący przycisk, możesz po prostu użyć ContextActionService:BindAction() na istniejącym Interact akcji, zmieniając funkcję i obraz przycisku.

Użyj poniższego przykładu kodu, aby ustawić istniejące przyciskowe etykietę "Rozmawiaj" i związać go z funkcją nazwaną talkToNPC":


ContextActionService:BindAction("Interact", talkToNPC, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)
-- Ustaw obraz na żółty przycisk "Rozmawiaj"
ContextActionService:SetImage("Interact", "rbxassetid://0011223344")

Wykrywanie innych urządzeń

W doświadczeniach platformowych konieczne jest zaznajomienie się z aktualnym urządzeniem użytkownika, aby dostosować interfejs użytkownika i wyświetlić poprawne powiadomienia kluczowe.

Na przykład, jeśli użytkownik podejmuje się skarbu i jest tam akcja związana z zbieraniem złota, możesz pokazać użytkownikom mobilnym przycisk "Zbierz" na ekranie i użytkownikom biurowym ikona"T" na ekranie.

Pamiętaj, że urządzenie mobilne może również mieć myszkę i klawiaturę lub gry wtykniętą. Możliwe jest również, że komputer stacjonarny ma włączoną touchscreen lub 2>gry2>. Należy również zaimportować opcje wtyczki użytkownika poprzez wyświetlenie opcji wtyczki

Komputerowy
Mobilny

W tych przypadkach możesz użyć UserInputService , aby wykryć, które urządzenia wводу są włączone. Jeśli wiele urządzeń wводу jest włączonych, użyj UserInputService:GetLastInputType() , aby uzyskać używany przez użytkownika końcowy urząd w interfejsie użytkownika.

Możesz użyć następującego ModuleScript, umieszczonego w ReplicatedStorage i zmienionego na UserInputModule, aby uzyskać wpisywaćwejścia użytkownika, po czym możesz dostosować układ niestandardowy lub kontekst do specyficznych potrzeb swojego doświadczenia.

Użyj następującego ModuleScript aby sprawdzić czy włączone zostały urządzenia wвоju i ostatni użyty urządzenie wвоju:


local UserInputService = game:GetService("UserInputService")
local UserInput = {}
local inputTypeString
-- Jeśli urządzenie ma aktywną klawiaturę i myszkę, załóż te wejścia
if UserInputService.KeyboardEnabled and UserInputService.MouseEnabled then
inputTypeString = "Keyboard/Mouse"
-- Else if urządzenie ma zdolność dotyku, ale nie ma klawiatury i myszy, załóż, że dotykuję
elseif UserInputService.TouchEnabled then
inputTypeString = "Touch"
-- Else if urządzenie ma aktywną gamepad, załóż, że gamepad jest wpisywany
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

Kiedy skrypt UserInputModule zostanie miejsce, użyj poniższego przykładu kodu w LocalScript, aby uzyskać ostatni wpisywaćwejścia użytkownika:


local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Wymagaj modułu
local UserInputModule = require(ReplicatedStorage:WaitForChild("UserInputModule"))
local currentUserInput, inputEnum = UserInputModule.getInputType()
print(currentUserInput, inputEnum)