XR LIVE MARKETING Projetos & Tecnologia Unreal Engine 5.6

XR Device Sense
instalação e configuração

Plugin interno que identifica se a pessoa está acessando pelo celular ou pelo computador e liga os controles de toque só quando faz sentido. Feito para experiências em Pixel Streaming. Este guia leva do zero ao funcionando.

Etapa 01

Instalar o plugin

O XR Device Sense é um plugin somente de conteúdo — não tem código C++. Isso significa que ele não exige Visual Studio, não converte o projeto para C++ e não precisa de compilação. É só copiar a pasta.

  • Descompacte o zip e copie a pasta XRDeviceSense para SeuProjeto/Plugins/
  • Abra o projeto. Em Edit > Plugins, confirme que XR Device Sense está habilitado
  • Reinicie o editor se ele pedir
  • No Content Browser, clique na engrenagem e marque Show Plugin Content

A pasta XRDeviceSense Content passa a aparecer na árvore do Content Browser. É lá que moram os Blueprints do plugin.

Etapa 02

Configurar o projeto

Três chaves em Project Settings > Engine > Input. As três precisam estar exatamente assim — é a combinação que faz o resto funcionar.

Project Settings · Input
SeçãoOpçãoValor
Mobile Always Show Touch Interface marcado
Mobile Default Touch Interface None
Mouse Properties Use Mouse for Touch desmarcado

O Always Show Touch Interface parece errado à primeira vista — dá a impressão de que vai mostrar o joystick para todo mundo. Não vai. Numa build Windows, é essa opção que faz a Engine criar o widget do joystick virtual. Sem ela, o comando de ativar a interface executa sem erro nenhum e não acontece nada. Como o Default Touch Interface fica em None, o widget nasce vazio — quem preenche é o componente.

Armadilha

O Use Mouse for Touch serve para simular toque com o mouse durante o teste, mas enquanto ele estiver marcado a câmera não responde ao mouse — todo movimento é convertido em toque antes de chegar na IA_Look. Marque só para testar, e desmarque antes de empacotar.

Etapa 03

Preparar o Touch Interface

O TI_Mobile é o asset que desenha os dois joysticks. Ele mora no Content do projeto, não no plugin, porque os valores de sensibilidade mudam de cena para cena.

Use a cópia calibrada que está no Drive. Se precisar recriar do zero: marque Show Engine Content, busque por DefaultVirtualJoysticks, duplique e salve em Content/UI/.

TI_Mobile · Controls [1] — joystick direito, câmera
CampoValorPor quê
Input Scale 0,35 / 0,28 Sensibilidade. O eixo vertical incomoda mais que o horizontal, por isso é sempre menor
Visual Size 240 Raio maior exige mais deslocamento do dedo para o mesmo ângulo — é o que dá controle fino
Thumb Size 112 Proporcional ao Visual Size
Interaction Size 300 / 260 Área que responde ao toque, maior que a área visível

No Controls [0], o joystick esquerdo de movimento, use os mesmos Visual Size e Thumb Size para simetria visual, e deixe o Input Scale em 1,0. Caminhar não sofre do mesmo problema de precisão que olhar em volta.

Armadilha

Os Controls começam no índice zero: [0] é o joystick da esquerda e [1] é o da direita. Para conferir sem depender do número, olhe o Main Input Key — o da câmera tem "Right" no nome.

Etapa 04

Ajustar a câmera

No IMC_Default, a IA_Look precisa de dois mapeamentos: um para o joystick e outro para o mouse. Cada um com tratamento próprio.

IA_Look · Gamepad Right Thumbstick 2D-Axis
OrdemModifierValor
Index [0]Dead Zone0,15 / 1,0 · Smoothed Radial
Index [1]Response Curve — Exponential2,0 / 2,0
Index [2]Smoothsem parâmetro
Index [3]Scalar0,35 / 0,28

A ordem importa: os modifiers são aplicados de cima para baixo. O Dead Zone mata o tremor do dedo parado. A curva exponencial é a que mais muda a sensação — movimento pequeno vira movimento pequeno, e a velocidade só cresce quando a pessoa arrasta de verdade. O Smooth tira o serrilhado entre frames.

IA_Look · Mouse XY 2D-Axis
OrdemModifierValor
Index [0]Negatesó o Y marcado
Index [1]Scalar0,5 / 0,4

Não replique os modifiers do joystick aqui. Dead Zone, curva e Smooth corrigem a imprecisão do dedo — no mouse eles só criam atraso. O Negate existe porque o eixo Y do mouse é invertido em relação ao pitch da câmera.

Etapa 05

Ligar no personagem

Abra o Blueprint do personagem — BP_FirstPersonCharacter ou BP_ThirdPersonCharacter, conforme o template.

  • No painel Components, clique em + Add e adicione o BPC_XRDeviceSense
  • Com ele selecionado, no painel Details preencha Interface De Toque com o TI_Mobile
  • Confirme que Classe Do Dispositivo e Confianca estão nos valores esperados (veja a nota abaixo)

No Event Graph, um único nó de ligação. O evento de toque pertence ao ator que recebe input, então essa parte não dá para encapsular no plugin:

Event Graph do personagem

Event BeginInputTouch → Registrar Toque (Target: BPC XR Device Sense)

Estado atual — leia antes de usar

Na versão em uso hoje, o default de Classe Do Dispositivo está em Tablet. Isso faz o joystick aparecer também no desktop. É proposital e provisório: nos templates First Person, os eventos de toque dependem da interface de toque já estar na tela, o que cria uma dependência circular — sem o joystick, o toque não é detectado; sem detectar o toque, o joystick não aparece. Joystick sobrando no desktop é um incômodo estético; joystick faltando no celular impede a pessoa de navegar. A correção definitiva passa pelo Web SDK da plataforma de streaming.

Etapa 06

Configurar a plataforma

No painel da Streampixel, em Settings > Inputs. Estas opções decidem o que chega no Unreal, e uma delas sozinha pode inutilizar tudo que você configurou até aqui.

Streampixel · Settings · Inputs
OpçãoValorEfeito
TouchligadoSem isso, o celular não manda toque nenhum
MouseligadoCâmera no desktop
KeyboardligadoWASD
GamepadligadoOpcional, para controle físico pelo navegador
Converter toque em mousedesligadoLigado, o dedo chega como clique e o componente nunca detecta o celular
Fake Mouse TouchdesligadoLigado, o mouse chega como toque e o desktop ganha joystick
Etapa 07

Testar

Para testar sem celular, marque temporariamente Use Mouse for Touch em Project Settings > Input e rode no PIE. O clique passa a disparar o evento de toque. Lembre de desmarcar depois.

Se precisar descobrir onde a cadeia parou, coloque um Print String no início da função Registrar Toque. Se ele imprimir, o toque está chegando e o problema está adiante — normalmente o campo Interface De Toque vazio. Se não imprimir, o toque não está chegando ao Unreal, e a causa está na etapa 06.

Armadilha

O nó Print String é Development Only. Numa build de Shipping ele não executa, e você não vê nada mesmo com tudo funcionando. Para diagnosticar, empacote em Development.

Calibragem final sempre pelo celular, através do stream — nunca pelo editor. A latência do Pixel Streaming faz a câmera parecer mais sensível do que é, porque o retorno chega atrasado e a pessoa corrige demais. Os valores desta página já vêm com folga para baixo por causa disso.

Referência

Os nós do componente

BPC_XRDeviceSense
O que faz
Registrar ToqueMarca a sessão como tátil no primeiro toque e classifica entre celular e tablet pelo tamanho da tela
Avaliar ViewportPalpite inicial pela proporção da tela. Chame no Begin Play
Aplicar ControlesLiga ou desliga a interface de toque conforme o dispositivo. Pode chamar à vontade — só age quando o estado muda
Eh Sessao MobileRetorna verdadeiro para celular ou tablet
Definir DispositivoUso interno. Só aceita a nova classificação se a confiança for maior ou igual à atual
On Device IdentifiedDispatcher que dispara quando a identificação melhora. Use para trocar HUD ou tutorial por dispositivo

A escala de confiança existe para impedir que um palpite fraco sobrescreva uma certeza: 1 proporção de tela, 2 toque detectado, 3 informado pelo navegador, 4 forçado manualmente.

Apêndice

Armadilhas conhecidas

Cada uma destas já custou tempo. Confira antes de abrir chamado.

Enum novo não nasce no índice zero

Ao criar uma variável de enum em Blueprint, o valor padrão não assume automaticamente o primeiro item. Sempre confira em Class Defaults. Um default errado aqui faz o componente se considerar celular antes de qualquer detecção.

Camera Rotation Lag só existe em terceira pessoa

É propriedade do Spring Arm. Em projetos First Person não há onde aplicar — e nem se deve: atrasar a câmera em primeira pessoa causa desconforto, porque a câmera é a cabeça da pessoa. Toda a suavização fica nos modifiers da IA_Look.

Nada do plugin pode referenciar /Game/

Antes de copiar o plugin para outro projeto, rode o Reference Viewer no BPC_XRDeviceSense. Se ele referenciar algum asset que more em /Game/, o plugin quebra ao ser copiado sozinho. É por isso que a Interface De Toque é Instance Editable em vez de ter valor default.

O que não viaja junto com o plugin

O TI_Mobile, os modifiers do IMC_Default, as três chaves de Project Settings e a ligação do evento de toque no personagem. Tudo isso é por projeto — por isso este guia existe.