Oltre la metà di tutte le sessioni Roblox viene giocata su dispositivi mobili, quindi è importante considerare l'accessibilità cross-platform quando progetti un'esperienza per un pubblico ampio. Dovresti mirare a supportare una varietà di dispositivi di input, tra cui mouse e tastiera e gamepad.
Durante la progettazione di un'esperienza mobile, considera la orientazione del dispositivo che intende l'utilizzo dell'utente nella tua esperienza, quindi implementa i tuoi input con ContextActionService per eseguire le seguenti attività di input correlate all'esperienza mobile:
- Crea pulsanti sullo schermo visibili solo su dispositivi mobili.
- Personalizza i pulsanti e l'interfaccia utente del mobile per creare un'esperienza mobile unica.
- Imposta il contesto in cui dipendono gli input che consente lo stesso pulsante o l'input per eseguire un'azione diversa a seconda della situazione.
- Rileva altri dispositivi di input , come un mouse o una tastiera connessi a un tablet mobile, per fornire le richieste sullo schermo corrette all'utente.
Orientalamento del dispositivo
Su telefoni e tablet, l'orientamento del dispositivo influisce in modo significativo sull'esperienza utente e sull'interazione. Ad esempio, la modalità paesaggio è meglio gestita con due dita mentre la modalità ritratto può essere gestita con una sola dita.
Per impostazione predefinita, le esperienze Roblox vengono eseguite in modalità paesaggio, consentendo alla esperienza di passare da un paesaggio all'altro "a sinistra" e "a destra" mentre il dispositivo dell'utente ruota. Tuttavia, le esperienze possono essere bloccate in un'orientazione specifica se lo desidera.
Modalità di Orientamento
Ci sono cinque diversi modalità di orientamento, tra cui due modalità basate sul sensore e tre modalità bloccate.
Modalità sensore | |
---|---|
Sensore di paesaggio | L'impostazione predefinita Roblox in cui l'esperienza appare sempre in modalità paesaggio (nessuna modalità ritratto) e il dispositivo rileva la sua orientazione fisica per garantire che la vista dell'esperienza sia sempre orientata verso l'alto. |
Sensore | Il dispositivo rileva la sua orientamento fisico per assicurare che la vista dell'esperienza sia sempre orientata verso l'alto, passando da un'area all'altra in base alle esigenze. |
Modalità Bloccate | |
---|---|
Paesaggio a sinistra | Su dispositivi con un pulsante home fisico, il pulsante home è a sinistra dello schermo. Su dispositivi con una barra home/nav virtuale, la sua regione di tocco è nella parte inferiore dello schermo. |
Paesaggio destro | Su dispositivi con un pulsante home fisico, il pulsante home è a destra dello schermo. Su dispositivi con una barra home/nav virtuale, la sua regione di tocco è nella parte inferiore dello schermo. |
Ritrattare | Su dispositivi con un pulsante di casa fisico, il pulsante di casa è sotto la schermata. Su dispositivi con una barra virtuale/nav, la sua regione di tocco è nella parte inferiore della schermata. |
Proprietà di Orientamento
Quando si imposta un'orientazione, si può impostare il orientamento di partenza, il orientamento in-experience e il orientamento attuale.
Inizializzazione Orientamento
StarterGui.ScreenOrientation imposta l'orientamento predefinito per un Posto. I valori accettabili includono:
Poiché questa proprietà influisce su tutti i nuovi utenti che si uniscono all'esperienza, puoi impostare il suo valore in StarterGui → Enum.ScreenOrientation all'interno di Studio.
Orientamento in-experience
PlayerGui.ScreenOrientation esplicitamente cambia l'orientamento dell'esperienza per un utente. Quando questa proprietà è impostata su uno dei Enum.ScreenOrientation enums in un LocalScript , l'esperienza si allineerà immediatamente per corrispondere alla Configurazione. Ciò può essere utile quando un'esperienza ha bisogno di fornire un
Il seguente esempio di codice in un LocalScript imposta l'orientamento dello schermo in portrait:
local Players = game:GetService("Players")local playerGUI = Players.LocalPlayer:WaitForChild("PlayerGui")task.wait(2)playerGUI.ScreenOrientation = Enum.ScreenOrientation.Portrait
Orientalazione attuale
PlayerGui.CurrentScreenOrientation ottiene l'orientamento del dispositivo attuale. I valori possibili includono:
Il seguente codice stampa l'orientamento della schermata dell'utente:
local Players = game:GetService("Players")local playerGUI = Players.LocalPlayer:WaitForChild("PlayerGui")print(playerGUI.CurrentScreenOrientation)
Modalità di movimento del personaggio
Roblox offre diversi StarterPlayer proprietà che puoi impostare per cambiare il modo in cui gli utenti su dispositivi mobili possono muoversi attraverso la tua esperienza.
Puoi impostare i schemi di controllo del movimento del cellulare per le esperienze Roblox cambiando i valori di StarterPlayer.DevTouchMovementMode a uno dei Seguendo:
Opzione | Descrizione |
---|---|
ClickToMove | Gli utenti possono muoversi attraverso l'esperienza facendo clic su una posizione di destinazione. Questo modo include un pulsante di salto nella regione inferiore destra dello schermo. Salto automatico è sempre attivo in questo modo di movimento. |
DPad | |
DynamicThumbstick | Un pollice dinamico appare in cui l'utente inizialmente premere verso il basso. Questo modo include un pulsante di salto nella regione inferiore destra dello schermo. Questa è la impostazione predefinita per gli utenti mobile se UserChoice è Impostare. |
Scriptable | Disabilita tutti i controlli predefiniti e ti consente di scriptare il tuo protocollo di controllo. |
Thumbpad | |
Thumbstick | Un joystick mobile situato nella regione inferiore sinistra dello schermo. A differenza di DynamicThumbstick , la posizione del joystick non è statica e non cambia quando l'utente tocca sullo schermo. |
UserChoice | Consente agli utenti di scegliere il loro schema di controllo desiderato dal menu in-experience Impostazioni. Questo è il modo di movimento predefinito per le esperienze. |
Salto automatico
Quando StarterPlayer.AutoJumpEnabled è abilitato, il personaggio dell'utente salta automaticamente attraverso gli spazi quando si avvicina all'angolo di una Piattaforma. StarterPlayer.AutoJumpEnabled è abilitato per impostazione predefinita per i dispositivi mobili.
Disabilita StarterPlayer.AutoJumpEnabled per disabilitare questa funzione e costringere gli utenti a saltare utilizzando solo le loro combinazioni di tasti.
Aggiungere pulsanti mobili
Per aggiungere pulsanti mobili, usa il metodo ContextActionService:BindAction() .
Il metodo BindAction() preleva i seguenti parametri:
Parametro | Tipo | Descrizione |
---|---|---|
azioneName | stringa | Una stringa di identificatore per l'azione che stai legando. Puoi usare il nome di azione con altre funzioni in ContextActionService per modificare il binding. |
funzioneToBind | funzione | La funzione da chiamare quando l'input specificato viene attivato. Questa funzione riceve tre argomenti:
|
creaTouchButton | booleano | Quando è vero, crea un pulsante sullo schermo quando il gioco è in esecuzione su un Dispositivomobile. |
Tipi di input | tupla | Gli input che intenzione di associare alla funzione, come i valori dell'elenco da un Enum.KeyCode . |
Puoi usare il seguente codice di esempio per creare un'azione Interact che crea un pulsante sullo schermo e accetta anche un 键盘 e 游戏手柄 input:
local ContextActionService = game:GetService("ContextActionService")
local function handleAction(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.Begin then
print(actionName, inputObject)
end
end
-- associare un'azione per funzionare
ContextActionService:BindAction("Interact", handleAction, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)
Rimozione dei pulsanti del mobile
Per rimuovere un pulsante mobile dalla schermata, chiama UnbindAction() utilizzando la stringa actionName che hai passato a BindAction() .
Usa il seguente esempio di codice per disbindare l'azione Interact precedentemente creata:
-- Unbind azione per nomeContextActionService:UnbindAction("Interact")
Personalizzare l'interfaccia utente del pulsante
Puoi usare una delle varie funzioni da ContextActionService per personalizzare i pulsanti sullo schermo che vengono creati da BindAction() .
Testo del pulsante
Per cambiare l'etichetta del testo per un pulsante mobile, chiama SetTitle() con la stringa actionName e un titolo:
-- Imposta il pulsante della etichetta "Talk"ContextActionService:SetTitle("Interact", "Talk")
Immagine del pulsante
I pulsanti del cellulare possono utilizzare immagini personalizzate come altri pulsanti GUI utilizzando il metodo SetImage() .
Usa il seguente codice di esempio per impostare un'immagine del pulsante, sostituendo l'ID risorsa con un'immagine a tua scelta:
-- Imposta immagine del pulsanteContextActionService:SetImage("Interact", "rbxassetid://0123456789")
Posizione del pulsante
Per impostazione predefinita, la posizione di un nuovo pulsante appare vicino alla sezione inferiore destra dello schermo. Dovresti considerare attentamente la posizione della posizione dei pulsanti su dispositivi mobili e tener presente le posizioni delle dita e delle mani.
Usa il seguente codice di esempio per impostare la posizione di un pulsante con il metodo SetPosition() :
-- Imposta la posizione del pulsanteContextActionService:SetPosition("Interact", UDim2.new(1, -70, 0, 10))
Input dipendenti dal contesto
Durante lo sviluppo per dispositivi mobili, potresti voler cambiare a volte ciò che un singolo pulsante fa in base al contesto. Poiché lo spazio sullo schermo sui dispositivi mobili è limitato, usa i pulsanti contestuali che eseguono azioni diverse in base a ciò che il personaggio è in grado di fare.
Ad esempio, puoi visualizzare un pulsante "Raccogli" attivo quando l'utente si trova vicino a un forziere d'oro:
Usa il seguente esempio di codice per creare un pulsante mobile che è etichettato "Raccogli" e è legato alla funzione 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))
-- Imposta l'immagine sul pulsante blu "Colleziona"
ContextActionService:SetImage("Interact", "rbxassetid://0123456789")
In un altro punto nel Gioco, puoi cambiare il pulsante per "Talk" quando l'utente è vicino a un NPC. Invece di aggiungere e rimuovere il pulsante esistente, puoi semplicemente utilizzare ContextActionService:BindAction() sull'azione Interact esistente, cambiando la funzione e l'immagine del pulsante.
Usa il seguente esempio di codice per impostare l'etichetta del pulsante esistente su "Talk" e legarlo a una funzione chiamata talkToNPC() :
ContextActionService:BindAction("Interact", talkToNPC, true, Enum.KeyCode.T, Enum.KeyCode.ButtonR1)-- Imposta l'immagine su giallo "Talk" buttonContextActionService:SetImage("Interact", "rbxassetid://0011223344")
Rilevamento di altri dispositivi
Nelle esperienze cross-platform è necessario conoscere il dispositivo attuale dell'utente per regolare i prompt di tastiera corretti.
Ad esempio, se un utente si avvicina a uno scrigno del tesoro e c'è un'azione legata alla raccolta dell'oro, puoi mostrare agli utenti mobili un pulsante "Colleziona" sullo schermo e agli utenti desktop un'Icona"T" sullo schermo.
Tieni presente che un dispositivo mobile può anche avere un mouse e tastiera o gamepad plugged in. È anche possibile che un desktop abbia un touchscreen abilitato. È importante fare riferimento alle opzioni di input preferite dall'utente visualizzando le opzioni di input per il Dispositivoattualmente in uso.
In questi casi, puoi usare UserInputService per rilevare quali dispositivi di input sono abilitati. Se più dispositivi di input sono abilitati, usa UserInputService:GetLastInputType() per ottenere l'ultimo dispositivo di input utilizzato dall'utente per visualizzare sull'interfaccia utente.
Puoi usare il seguente ModuleScript, posizionato all'interno di ReplicatedStorage e rinominato in UserInputModule, per ottenere il inserisci / scrividi input dell'utente, dopo cui puoi adattare il layout o il contesto dell'interfaccia utente alle esigenze specifiche della tua esperienza.
Usa il seguente ModuleScript per controllare l'abilitazione dei dispositivi di input e l'ultimo Dispositivodi input utilizzato:
local UserInputService = game:GetService("UserInputService")
local UserInput = {}
local inputTypeString
-- Se l' dispositivo ha una tastiera e un Topo, or mouse as computer mouseattivo, supponi questi input
if UserInputService.KeyboardEnabled and UserInputService.MouseEnabled then
inputTypeString = "Keyboard/Mouse"
-- Altrimenti, se il dispositivo ha la capacità di toccare ma non ha tastiera e Topo, or mouse as computer mouse, assumi l'input del tocco
elseif UserInputService.TouchEnabled then
inputTypeString = "Touch"
-- Altrimenti, se il dispositivo ha un gamepad attivo, assumi l'input del gamepad
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
Una volta che lo script UserInputModule è in Posto, usa il seguente esempio di codice in un LocalScript per ottenere l'ultimo inserisci / scrividi input dell'utente:
local ReplicatedStorage = game:GetService("ReplicatedStorage")-- Richiesto modulolocal UserInputModule = require(ReplicatedStorage:WaitForChild("UserInputModule"))local currentUserInput, inputEnum = UserInputModule.getInputType()print(currentUserInput, inputEnum)