Desenvolvimento multiplataforma

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Roblox é inerentemente multiplataforma, pois os jogadores podem descobrir e entrar em jogos em seus telefones ou tablets e, em seguida, continuar de onde pararam em seu PC ou console. Para suportar um conjunto crescente de plataformas, você deve construir interfaces de usuário que se adaptem perfeitamente ao tipo de entrada (toque, controle, mouse/teclado), tamanho da tela e orientação do dispositivo. Este guia, o guia de design adaptativo e os recursos vinculados podem ajudá-lo a projetar um verdadeiro jogo multiplataforma que seja compatível, acessível e agradável em todas as plataformas.

Entrada

Um jogo cuidadosamente projetado deve suportar todos os principais tipos de entrada, incluindo mouse e teclado, toque e controles.

Ações multiplataforma

Para simplificar as entradas multiplataforma, Roblox fornece o Sistema de Ação de Entrada para definir ações como "pular", "correr" ou "atirar" e configurar vinculações para múltiplas entradas de hardware que acionam essas ações. Você não precisa pensar em todos os aspectos técnicos das entradas de hardware e quando ouvir gatilhos de entrada específicos; você simplesmente define quais entradas realizam quais ações.

Detecção do tipo de entrada

No desenvolvimento multiplataforma, é importante que você determine e responda ao tipo de entrada principal que um jogador está usando, normalmente para garantir que os elementos da interface do usuário como botões e menus na tela funcionem elegantemente e suportem interação entre dispositivos.

Por exemplo, um dispositivo habilitado para toque assume que o toque é a entrada padrão e que botões de toque podem aparecer para ações, mas um jogador pode optar por conectar um controle bluetooth. Nesse caso, o toque continua sendo uma entrada válida, mas você pode assumir que o jogador deseja mudar para o controle conectado como o tipo de entrada principal e possivelmente usar o toque como uma entrada de backup para a interface do usuário na tela.

Se você estiver usando o Sistema de Ação de Entrada, a propriedade PreferredBinding complementa a detecção de entrada principal: assim como PreferredInput relata o tipo de entrada principal atual do jogador, PreferredBinding relata a InputBinding específica que corresponde ao dispositivo atual do jogador. Ambos são atualizados automaticamente à medida que o jogador troca de dispositivos, para que você possa acionar a interface do usuário ciente do dispositivo sem escrever a lógica de troca de dispositivo você mesmo.

Dicas assistivas

Com base no tipo de entrada principal, é recomendável que você inclua dicas de interface assistiva sempre que possível. Por exemplo, ao selecionar ferramentas para equipar, exiba dicas específicas de entrada, como 15 quando o jogador estiver usando um teclado, ou dicas de gatilho do controle quando o jogador estiver usando um controle.

Para um controle mais granular, ou se você precisar personalizar a exibição de dicas além do que InputActionLabel oferece, você pode usar os métodos UserInputService abaixo para coletar manualmente imagens e strings específicas da plataforma:

Os métodos GetImageForKeyCode() e GetStringForKeyCode() são úteis para coletar uma imagem ou string específica da plataforma para usar em uma dica de interface do usuário, como os seguintes exemplos:

Código da TeclaImagem do XboxImagem do PlayStationString
Enum.KeyCode.ButtonAButtonA
Enum.KeyCode.ButtonXButtonX
Enum.KeyCode.Onen/an/a1
Enum.KeyCode.Fiven/an/a5

Interface do usuário

Uma interface de usuário bem projetada é essencial para que os jogadores em todas as plataformas interajam com seu jogo.

Posição e tamanho

Todos os elementos da interface do usuário devem ser posicionados e dimensionados adequadamente para garantir visibilidade e interatividade em vários tamanhos de tela. Posicionar elementos da interface do usuário por Scale é uma abordagem comum, pois é baseada em uma porcentagem dos limites X e Y da tela, não em um valor em pixels (os pixels podem variar arbitrariamente tanto em número quanto em densidade entre dispositivos). Você também pode utilizar o AnchorPoint do elemento para definir sua origem posicional. Por exemplo, o contêiner da interface do usuário que contém os contadores de gemas/moedas na imagem a seguir está posicionado em uma escala X de 1 (direita) e uma escala Y de 0 (cima) com um ponto de ancoragem superior direito.

Scale também é recomendado para dimensionar elementos da interface do usuário, como fazer um contêiner da interface do usuário ocupar 75% da largura em todas as telas. No entanto, 75% renderizaria um tamanho enorme em TVs 4K para jogadores de console, então é recomendável que você explore adaptação do tamanho da tela como uma forma de adaptar layouts da interface do usuário em diferentes visores.

Adaptação do tamanho da tela

Com uma infinidade de tamanhos de tela possíveis acessíveis à plataforma Roblox, tentar prever o tamanho da tela em pixels muitas vezes leva a interpretações erradas. Para ajudar a determinar o tamanho da tela de um jogador para adaptar o tamanho/posição dos elementos da interface do usuário, Roblox fornece a propriedade somente leitura ViewportDisplaySize, que representa o tamanho de renderização categorizado internamente do viewport.

ViewportDisplaySizeResumo
SmallA maioria dos dispositivos tablet/móvel/portáteis
MediumA maioria dos laptops e monitores
LargeA maioria das TVs ou maiores

Para uma personalização mais nativa, você pode usar o Editor de Estilo da interface do usuário para configurar Consultas de Estilo para os valores de ViewportDisplaySize e PreferredInput. Usar seletores intrínsecos como @ViewportDisplaySizeSmall ou @PreferredInputTouch permite que sua interface do usuário troque automaticamente tokens para tamanhos de texto, dimensões de contêiner e outras medidas à medida que o ambiente do dispositivo do jogador ou o método de entrada principal mudam.

Contêineres de layout

Para facilitar a organização da interface do usuário, você deve usar componentes de layout para organizar os filhos. Ao usar contêineres de layout, certifique-se de que os filhos sejam legíveis, acessíveis e não desordenados. Um componente de layout comum é UIListLayout, que posiciona GuiObjects irmãos em linhas ou colunas e ajusta-se de acordo sempre que você adiciona ou remove um objeto irmão.

Você também deve considerar a distribuição e o posicionamento relativo dos elementos dentro dos contêineres de layout para a melhor experiência do usuário. Integrar flex em um layout de lista é uma maneira poderosa de preencher/distribuir igualmente ou alinhar/esticar itens ao longo de sua linha, ou flexionar itens específicos em um espaço variável.

UIListLayouts ilustrando FillDirection de horizontal ou vertical.

Acessibilidade

Mesmo com elementos da interface do usuário adequadamente dimensionados em todos os tamanhos de tela de dispositivos, o jogo geral deve atender aos padrões de acessibilidade para jogadores com deficiência visual ou daltonismo. O tamanho do texto pode influenciar muito a legibilidade da interface do usuário baseada em texto, então você deve incluir uma restrição de tamanho de texto para garantir que o texto não se torne ilegível (muito pequeno) ou visualmente muito grande em telas maiores, como TVs 4K.

Para mais dicas sobre acessibilidade, veja diretrizes de acessibilidade.

Dicas e truques finais

À medida que você trabalha em um jogo totalmente multiplataforma, considere as seguintes dicas e truques:

©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.