Como projetar pré-visualizações de posicionamento de móveis que evitam colisões e erros de alocação
Para um jogo de decoração, a pré-visualização de um móvel deve responder a três perguntas antes de o jogador confirmar: onde o item vai ficar, essa posição é permitida e o que acontecerá se ele girar ou cancelar? Use um "fantasma" em tempo real do item, valide sua área de ocupação na posição e rotação atuais e mostre um motivo claro quando o posicionamento for bloqueado. Mantenha a pré-visualização visível até a confirmação e faça com que o cancelamento retorne o jogador ao ambiente sem posicionar nada. Este guia foca no design dessa interação de posicionamento para desenvolvedores de jogos.
O que a pré-visualização deve comunicar?
Trate a pré-visualização como uma versão temporária do móvel final, não apenas como um marcador de cursor. Ela deve mostrar o tamanho do item, sua orientação, o ponto de contato com o chão ou superfície de apoio e o estado de posicionamento. As diretrizes de design do Google ARCore recomendam visualizar o ponto de destino com o objeto ou sua sombra e fornecer feedback imediato quando uma superfície for detectada. Embora o posicionamento em RA tenha restrições diferentes das de um jogo de decoração, o mesmo princípio se aplica: os jogadores precisam ver onde um item vai ficar antes de se comprometerem. Diretrizes de posicionamento de conteúdo do Google ARCore
Uma pré-visualização útil tem três estados legíveis: válido, inválido e não resolvido. Válido significa que a proposta de posicionamento atende às regras do jogo. Inválido significa que uma regra conhecida foi violada, como sobreposição com outro item ou uma superfície sem suporte. Não resolvido significa que o jogo ainda não consegue determinar um alvo válido, talvez porque o cursor esteja sobre uma parede ao tentar posicionar um móvel de chão. Não apresente o estado não resolvido como válido simplesmente porque a verificação de colisão não encontrou nada; "nenhuma colisão detectada" e "pode ser posicionado aqui" não são o mesmo resultado.
Como a validade deve diferir da detecção de colisão?
A colisão é apenas uma parte da validade do posicionamento. Um sofá pode não interceptar outro objeto, mas ainda estar fora do cômodo, flutuando acima do chão, virado para uma direção inutilizável ou bloqueando uma porta de acordo com as regras do jogo. Defina a validade como uma lista de verificação de restrições para cada categoria de móvel: superfície de apoio permitida, limites do cômodo, colisão, limites de orientação e qualquer folga de acesso ou interação deliberada que o jogo exija.
Mantenha as regras rígidas distintas das preferências. Uma colisão ou superfície sem suporte pode impedir a confirmação. Uma passagem estreita pode ser apenas um aviso sutil se o jogo permitir. Essa distinção evita que uma sugestão decorativa pareça uma falha definitiva e permite que os jogadores entendam quais condições podem escolher aceitar. Pesquisas sobre sistemas de disposição de móveis também tratam os arranjos como guiados por múltiplas regras de layout em vez de apenas pela geometria; o sistema publicado por Stanford incorporou diretrizes de design de interiores e avaliou layouts sugeridos com participantes. Isso apoia a consideração de fatores que vão além da colisão, embora não prescreva uma interface de jogo específica. Estudo de Layout Interativo de Móveis de Stanford
A verificação técnica deve corresponder à área de ocupação transformada da pré-visualização. A API de sobreposição da Unreal Engine descreve a verificação de uma forma de colisão fornecida em uma posição e rotação especificadas, enquanto a Physics.OverlapBox da Unity 6 aceita centro, meias-extensões, orientação, máscara de camada e comportamento de gatilho. Essas APIs ilustram por que uma mudança de rotação deve acionar uma verificação contra a forma rotacionada. O comportamento da engine e os detalhes da API variam de acordo com a versão; use a documentação da versão da engine e da configuração de colisão efetivamente utilizadas no jogo. API de sobreposição da Unreal Engine e Physics.OverlapBox da Unity 6
Como devem ser exibidas as posições válidas e inválidas?
Combine a aparência visual com um indicador redundante. Por exemplo, altere a tonalidade e o contorno do fantasma e mostre um status curto como "Pronto para posicionar" ou "Sobrepõe a mesa". A cor por si só pode ser difícil de distinguir, especialmente sobre pisos ou iluminações variadas. Mantenha a silhueta do móvel visível em ambos os estados para que o jogador ainda possa avaliar sua posição e rotação. Se um colisor específico causou o bloqueio, identificá-lo pode ajudar na correção; evite sobrecarregar a pré-visualização com detalhes técnicos excessivos quando um motivo em linguagem simples for suficiente.
Faça com que o estado seja atualizado conforme o móvel se move, e não apenas depois que o botão de confirmação for pressionado. Na confirmação, posicione o móvel apenas se o estado atual for válido e dê um breve retorno de que a ação foi bem-sucedida. Se for inválido, mantenha a pré-visualização ativa e informe o motivo para que o jogador possa ajustá-lo sem reiniciar a interação. Esta é uma recomendação de design derivada do objetivo de evitar posicionamentos acidentais e das orientações do Google para comunicar erros com clareza e fornecer um caminho acionável de correção. Orientações de estado de erro do Google
Evite depender de um único limite que alterne todo o fantasma entre válido e inválido sem explicar o motivo. Se uma cadeira estiver muito perto de uma parede, por exemplo, o jogador deve ver a área de ocupação real e receber um aviso específico como "Fora do cômodo" ou "Sobrepõe a parede". Se a regra for apenas uma preferência, classifique-a como um aviso e mantenha a confirmação disponível, caso isso se adeque ao design do jogo.
Qual feedback a rotação deve fornecer?
Mantenha a pré-visualização vinculada à entrada do jogador durante a rotação e valide-a novamente no novo ângulo. A área de ocupação pode atingir um objeto próximo mesmo quando o centro do item quase não se move. O controle de rotação também deve tornar a direção e a quantidade de alteração previsíveis: uma indicação visível de rotação, um incremento claro para rotação em etapas ou um indicador de rotação contínua podem comunicar o que a ação fará.
Após a rotação, atualize tanto o fantasma quanto qualquer indicador de orientação. Uma pequena seta apontada para o chão, um marcador frontal ou uma borda frontal visível podem facilitar a identificação de para onde um sofá ou mesa ficará voltado. Se o móvel se ajustar a uma grade ou a incrementos fixos (snap), mostre o resultado ajustado na pré-visualização, e não apenas a posição não ajustada do cursor. Isso permite que o jogador avalie o posicionamento que será efetivamente confirmado.
Como o cancelamento e a recuperação devem funcionar?
Enquanto estiver carregando um item, deixe o cancelamento disponível por meio de um controle visível e consistente. O cancelamento deve remover o fantasma e retornar ao estado anterior do cômodo sem posicionar, excluir ou mover móveis de forma oculta. Se o jogador começou movendo um item já posicionado, o cancelamento deve restaurá-lo à sua posição original; esta é uma regra de interação recomendada, não um comportamento garantido por nenhuma API de engine.
As ações de confirmar e cancelar precisam de rótulos ou ícones distintos, e a pré-visualização deve permanecer até que uma delas seja escolhida. Quando um posicionamento estiver bloqueado, mostre um próximo passo simples — mover, girar ou cancelar — em vez de deixar o jogador adivinhando. As diretrizes de posicionamento do Google também recomendam feedback claro sobre erros e um caminho para a resolução, observando ainda que os usuários podem precisar de instruções antes de usar um gesto de arrastar. Em jogos, mostre o controle relevante assim que o móvel for levantado, e não apenas em uma tela de ajuda separada. Orientações de posicionamento manual do Google
Um exemplo prático: posicionando uma estante de livros
Imagine um jogador posicionando uma estante de livros ao lado de uma parede. A pré-visualização primeiro encontra um alvo no chão e alinha a estante contra a parede. Sua área de ocupação se sobrepõe a uma mesa lateral, então o fantasma exibe um estado inválido e o aviso "Sobrepõe a mesa lateral". O jogador a gira; a área de ocupação é recalculada no novo ângulo e a pré-visualização agora se encaixa sem sobreposição. Um marcador frontal confirma qual lado ficará voltado para o interior do cômodo. O jogador vê "Pronto para posicionar", confirma, e o item aparece na posição exibida pelo fantasma.
Se, em vez disso, a estante ficar parcialmente fora dos limites do cômodo, o jogo deve identificar essa restrição, mesmo que não haja colisão com outros objetos. Se a superfície de destino não puder ser determinada, exiba um aviso neutro de não resolvido, como "Posicione no chão", e não permita a confirmação. Essas mensagens são exemplos ilustrativos, não afirmações sobre recursos do Metlivi ou resultados medidos de usabilidade.
Um checklist prático de design
Antes da implementação, documente as regras de posicionamento por tipo de item e decida quais são impeditivas e quais são apenas avisos. Em seguida, verifique se a pré-visualização utiliza a mesma área de ocupação, rotação, alinhamento (snapping) e ponto de apoio que o objeto final posicionado. Teste a interação nos limites de paredes, cantos, vãos estreitos e após a rotação; confirme se o fantasma não valida uma posição que o posicionamento final rejeitaria. Por fim, teste o ciclo completo: pegar, mover, girar, recuperar de um ponto inválido, posicionar e cancelar — incluindo o cancelamento ao reposicionar móveis já existentes.
A regra de decisão é direta: mostre o resultado exato proposto, diferencie estados válidos, inválidos e não resolvidos, explique o motivo impeditivo mais útil e preserve um caminho previsível para girar, ajustar, confirmar ou cancelar. Isso faz da pré-visualização de posicionamento um auxílio prático à tomada de decisão, em vez de um aviso de última hora.
