Crie aplicativos industriais em 3D em tempo real com mais rapidez: Dicas essenciais do modelo "Fundamentos da Unity Industry" do Unity

May 28, 2026|15 Min
Unity_Crie aplicativos 3D em tempo real mais rapidamente_Asset Transformer_Crie conjuntos de regras a partir do modelo "Fundamentos do setor"

De protótipos a aplicativos de treinamento, Digital Twins, interfaces homem-máquina e configuradores de produtos, não há praticamente nenhum limite para a variedade de aplicativos que você pode desenvolver e lançar com o Unity Industry.

Você está curioso para saber como sua organização pode utilizar o Unity, é um novo assinante ou um desenvolvedor mais experiente do Unity Industry que deseja aprimorar suas habilidades? Quer você esteja abrindo o Editor pela primeira vez ou seja um desenvolvedor experiente que já lançou vários projetos, é sempre útil aprender a aproveitar os poderosos recursos do Unity da maneira mais eficiente, tornando sua experiência de trabalho diária o mais produtiva e agradável possível.

Aumente a produtividade com a conversão de CAD para 3D, uma interface de usuário responsiva, arquitetura de código e muito mais

Este guia oferece uma visão geral do modelo "Unity Industry Fundamentals", um novo modelo de aprendizagem integrado ao Editor destinado aos desenvolvedores do Unity Industry.


O modelo "Fundamentos da Indústria" está disponível no Unity Hub para assinantes do Unity Industry ou para quem possui uma versão de avaliação de 30 dias.

O modelo "Fundamentos da Indústria" está disponível no Unity Hub para assinantes do Unity Industry ou para quem possui uma versão de avaliação de 30 dias.

Principais conclusões sobre os fundamentos do setor

Por meio de uma série de tutoriais, o modelo Unity Industry Fundamentals mostra as etapas para implementar recursos importantes em projetos do Unity Industry, incluindo:

  • Como usar o Asset Transformer Toolkit para converter e otimizar arquivos CAD em recursos 3D prontos para uso em um projeto industrial em tempo real
  • Como criar uma HMI e conectar a interface do usuário a dados em tempo real
  • Como implementar um sistema de navegação que permita tanto a navegação automática quanto a manual
  • Como configurar câmeras virtuais para que os usuários tenham sempre a visão necessária em simulações de ambientes complexos e de grande porte
  • Como arquitetar scripts em C# que gerenciem o comportamento do robô, a gestão de estado e o fluxo de dados usando ScriptableObjects para manter a camada de dados desacoplada

O objetivo do Industry Fundamentals é ajudar a tornar sua experiência de desenvolvimento no Unity mais eficiente, focada e produtiva. As dicas que você aprenderá se aplicam a diversos tipos de aplicações industriais em 3D em tempo real, incluindo interfaces homem-máquina (HMIs), simulações de treinamento, Digital Twins e configuradores de produtos.

Baixe o modelo “Fundamentos do Setor”

Antes de começarmos, veja aqui os passos para encontrar e baixar o modelo, caso ainda não tenha feito isso.

Se você é assinante do Unity Industry:

1. Abra o Unity Hub e atualize para o Unity 6.4

2. Crie um novo projeto e procure por “Fundamentos da Indústria”, ou acesse a categoria “Aprendizagem” e selecione o modelo lá.

Se você não tiver uma assinatura do Unity Industry:

1. Acesse nossa página de avaliação gratuita e siga as instruções para obter uma avaliação gratuita.

2. Assim que seu período de avaliação estiver ativo, siga os mesmos passos que os assinantes do plano Industry.

Experimente o Unity Industry gratuitamente

Um modelo que você pode explorar e modificar

A interface do painel de controle, no modo automático, com o minimapa do armazém

A interface do painel de controle, no modo automático, com o minimapa do armazém

O modelo é composto por quatro tutoriais que orientam o usuário pelos fluxos de trabalho e etapas necessárias para criar um aplicativo industrial interativo em 3D. Depois que o projeto estiver aberto no Editor do Unity, você encontrará a cena pronta, chamada Warehouse, na pasta Scenes. Esta cena retrata um ambiente de armazém totalmente montado, com vários robôs espalhados pelo chão, prontos para retirar, estocar e movimentar o estoque.

A cena de demonstração foi projetada para a prototipagem rápida; basta arrastar e soltar seu próprio modelo 3D na cena, conectar um único componente e tudo será automaticamente conectado. Seu recurso aparecerá na interface do usuário e passará a se comportar instantaneamente como um robô autônomo, movendo-se pelo ambiente e respondendo às entradas e saídas da interface do usuário.

Abra a visualização do jogo, entre no modo de jogo e comece a interagir no armazém simulado por meio de uma interface de usuário que permite controlar e monitorar cada um dos robôs, exibindo dados em tempo real, como o nível de carga da bateria e o estado de funcionamento de cada robô. A interface do usuário exibe um mapa em miniatura que mostra onde os robôs estão no momento. Você também pode substituir manualmente algumas das configurações do robô, mudando do modo automático para o manual, e controlar o movimento de cada robô com as teclas WASD. Ajuste a velocidade de cada robô e use o controle deslizante para alongar ou encurtar o ARM dele.

Vamos dar uma olhada nas principais funcionalidades desta simulação de armazém.

Assista: Conceitos básicos

Assista: Fundamentos do setor: Conceitos básicos

O Kit de Ferramentas Asset Transformer: Do CAD a recursos 3D otimizados

Um dos modelos 3D de robôs da cena de exemplo do armazém principal no modelo "Fundamentos da Indústria"

Um dos modelos 3D de robôs da cena de exemplo do armazém principal no modelo "Fundamentos da Indústria"

Os softwares de CAD priorizam a precisão matemática e os detalhes geométricos em seus modelos, enquanto as aplicações em tempo real precisam equilibrar a qualidade visual com considerações práticas de desempenho, como um número razoável de polígonos, amostragem eficiente de texturas e hierarquias que possam ser filtradas e processadas em lote.

O Unity Asset Transformer Toolkit, incluído na licença Unity Industry, é a ponte entre os dados CAD da sua organização e os seus projetos do Unity. Ele integra perfeitamente seus dados existentes ao Unity por meio de fluxos de trabalho automatizados de preparação de dados, poupando seu tempo e esforço. Você pode importar qualquer tipo de arquivo 3D ou CAD e eliminar a necessidade de múltiplas importações ou recriação de modelos, com controle total sobre o tamanho e a qualidade da malha, o que otimiza seus dados para garantir um bom desempenho nos dispositivos de destino.

No exemplo "Fundamentos da Indústria", você verá como importar um novo recurso de robô para o Unity. O modelo do robô, baseado no arquivo CAD original, é um recurso pesado com uma aparência rudimentar, não adequado para uma apresentação sofisticada. O Asset Transformer Toolkit é utilizado para converter e otimizar os modelos para uso em um aplicativo 3D interativo, adequado para plataformas como computadores e a web.

Para saber como instalar e abrir o Asset Transformer Toolkit no Editor, assista ao vídeo no final desta seção.

Vamos começar dando uma olhada na barra de ferramentas.

Explore a barra de ferramentas do Asset Transformer Toolkit

A Caixa de Ferramentas do Kit de Ferramentas do Asset Transformer

A Caixa de Ferramentas do Kit de Ferramentas do Asset Transformer

Aqui está uma breve explicação das ações disponíveis na barra de ferramentas:

  • Modelo de importação: Clique aqui para iniciar o processo de importação e trazer seus dados CAD para o Unity.
  • Malha e otimização: Use essas ferramentas para simplificar a geometria e remover quaisquer detalhes desnecessários, como, por exemplo, orifícios ou faces internas.
  • Remesh: Esse recurso permite reconstruir completamente a geometria para casos de uso que exigem alto desempenho.
  • Hierarquia: Use-os para corrigir quaisquer estruturas de objetos desorganizadas trazidas das montagens CAD.
  • Transformar: Corrija rapidamente os pontos de rotação e os problemas de alinhamento no modelo.
  • UV e colisionadores: Use essas configurações para gerar os dados de que o Unity precisa para texturização e interações baseadas em física.

Manter as configurações e modificações do modelo ao importar

Este guia não aborda o processo de importação em detalhes; o tutorial no Editor e o vídeo no final desta seção irão guiá-lo por todas as etapas importantes.

O importante a destacar aqui é que, ao selecionar o arquivo que deseja importar, é criado um ScriptableObject, com o mesmo nome do seu modelo, na pasta Assets da janela Projeto.

Este não é o modelo propriamente dito; a vantagem aqui é que o ScriptableObject contém um conjunto de configurações que você pode usar para importar o modelo, permitindo que você mantenha suas configurações e modificações. Se forem feitas alterações no modelo CAD e você precisar reimportá-lo, não será necessário configurar tudo do zero novamente. Todas essas configurações serão salvas no ScriptableObject.

Ao selecionar o arquivo que deseja importar, é criado um ScriptableObject, com o mesmo nome do seu modelo, na pasta Assets da janela Projeto. Este ScriptableObject contém um conjunto de configurações que você pode usar para importar o modelo, permitindo que você mantenha suas configurações e modificações.

Ao selecionar o arquivo que deseja importar, é criado um ScriptableObject, com o mesmo nome do seu modelo, na pasta Assets da janela Projeto. Este ScriptableObject contém um conjunto de configurações que você pode usar para importar o modelo, permitindo que você mantenha suas configurações e modificações.

Ao selecionar o ScriptableObject e abrir a janela do Inspector, você verá o campo “Modo de importação” na parte superior, que pode ser definido como “Prefab” ou “Cena”:

  • Pré-fabricado: Para objetos individuais
  • Cena: Para recursos muito grandes e detalhados, como um arranha-céu com milhares ou até milhões de objetos

O Inspector também oferece três guias: Modelo, mecanismo de regras e níveis de detalhe (LODs):

  • Modelo: A partir daqui, você pode definir os parâmetros de importação do modelo. Esta é a etapa em que o modelo de origem bruto é convertido em um recurso 3D otimizado.
  • Mecanismo de regras: Defina um conjunto de regras que permita automatizar a preparação de dados do seu modelo diretamente a partir da etapa de ingestão. Os conjuntos de regras são especialmente úteis quando você precisa reimportar seu modelo de origem à medida que ele evolui. Consulte a próxima seção para obter uma introdução ao Mecanismo de Regras e aos Conjuntos de Regras.
  • LODs: Adicione regras de LOD para gerar LODs; elas podem ser geradas diretamente durante o processo de importação do modelo, como etapa final.

Quando as configurações estiverem prontas, clique em Importar e o prefab do modelo será adicionado à pasta Assets > 3DModels na visualização do projeto. Você pode arrastar e soltar o modelo na janela Scene, o que também o adiciona à Hierarchy.

Assista: Instale o Unity Asset Transformer Toolkit

YouTube video

Otimizar os recursos 3D

O Asset Transformer Toolkit oferece ferramentas para limpar modelos importados, preparando-os para um ambiente em tempo real, sem comprometer a fidelidade visual nem os metadados necessários. Isso pode ser feito automaticamente durante o processo de importação, utilizando os conjuntos de regras mencionados anteriormente, ou manualmente após a importação, por meio de ações individuais, utilizando as ferramentas da barra de ferramentas do Asset Transformer.

Organizar a hierarquia

No modelo, se você seguir as etapas para importar um novo recurso de robô, verá que sua estrutura na Hierarquia é excessivamente complicada. Clique em um dos elementos básicos, como o GameObject chamado body_body_main_01-1, e você verá no Inspector que todos os metadados associados a essa parte estão incluídos em um componente. No entanto, seu objeto filho contém o filtro de malha, que mostra a geometria real, bem como as informações do material atualmente atribuídas a ele.

Um GameObject filho do objeto body_body_main_01-1 com um componente Mesh Filter adicionado.

Um GameObject filho do objeto body_body_main_01-1 com um componente Mesh Filter adicionado.

É mais eficiente ter todos esses detalhes reunidos em um único objeto, juntamente com os metadados, em vez de separados.

Para corrigir isso, use a ferramenta Mesclar. Por padrão, a ferramenta "Mesclar" está configurada para "Mesclar tudo". É melhor não fazer isso, pois tudo será mesclado em um único prefab. Você quer manter o nível final de todos os objetos. Se você selecionar a opção “Nível final” no menu suspenso, a ferramenta “Mesclar” percorrerá a lista na hierarquia para localizar o último objeto em cada árvore e, em seguida, mesclá-lo com o objeto imediatamente acima dele.

A ferramenta Merge_Unity_Asset Transformer Toolkit

A ferramenta Merge no Asset Transformer Toolkit

Veja os passos adicionais neste vídeo.

Extermínio

Você pode remover a geometria desnecessária de um modelo para torná-lo mais leve. A opção “Estatísticas” no Asset Transformer Toolkit exibe estatísticas de um modelo selecionado ou de uma parte do modelo. O modelo CAD que você importará neste tutorial modelo contém 510 GameObjects e mais de 600.000 triângulos antes da otimização, o que o torna um modelo realmente denso. Assista a este vídeo para ver como os orifícios do novo modelo de robô são removidos.

Verifique a densidade do modelo ativando o menu "Depuração" e alterando a exibição para a proporção de vértices. Isso mostra em vermelho onde há objetos extremamente densos em relação a todos os outros elementos da cena. Isso é um bom indicador de onde você pode usar a decimação para otimizar um modelo.

Extermínio em grande escala

Extermínio em grande escala

A redução pode ser um processo demorado se o seu modelo tiver muita geometria, como neste caso. Assim, você também tem a opção de reduzir drasticamente em grande escala.

Ao definir a opção “Critério” na ferramenta de redução de detalhes como “Qualidade” e selecionar o nível superior do modelo CAD na “Hierarquia”, você pode definir um nível de qualidade desejado e, em seguida, executar a ferramenta para aplicar a redução de detalhes a todo o modelo.

Ao aplicar essa ação ao recurso do robô com a qualidade definida como baixa, houve uma redução de 65% no número de triângulos, que agora ficou em pouco menos de 200.000, tornando-o otimizado para rodar em dispositivos móveis.

Ajustar as normais

Um problema que costuma surgir com otimizações intensas como essa é que elas podem comprometer a fluidez do modelo. A aparência e o aspecto da imagem sob a luz podem mudar após a decimação, quando, de repente, você percebe artefatos ou talvez cantos mais acentuados do que antes. Isso pode ser corrigido ajustando as normais do seu modelo. O Asset Transformer Toolkit oferece várias ferramentas que permitem ajustar ou redefinir as normais do seu modelo.

Assista: Otimizar o modelo CAD

YouTube video

Use conjuntos de regras para economizar tempo ao reimportar ativos

Os modelos CAD costumam passar por inúmeras iterações durante o processo de projeto, e pode se tornar ineficiente ter que executar todas as ações acima sempre que você reimportar um modelo após alterações feitas no aplicativo CAD.

Dependendo da fase em que você se encontra no processo de design e do número de iterações de design, isso pode se tornar um processo tedioso.

É aí que os conjuntos de regras oferecem uma grande vantagem. Os conjuntos de regras, configurados no mecanismo de regras do Unity Asset Transformer Toolkit, são uma sequência de instruções, chamadas de ações, que o Unity segue durante a importação ou que você pode aplicar manualmente, automatizando muitas das ações que normalmente se deseja aplicar a um modelo CAD.

Criar um conjunto de regras

Um conjunto de regras é, essencialmente, uma receita que orienta o Asset Transformer Toolkit a localizar o(s) objeto(s) específico(s) com base em critérios determinados e, em seguida, aplicar a ação especificada por você. Por exemplo, quando você encontrar esse nome de material no arquivo CAD, associe-o a este material do Unity. Quando encontrar peças com nomes seguindo esse padrão, agrupe-as. Quando o número de polígonos ultrapassar esse limite, gere níveis de LOD. Essas regras permitem automatizar o que, de outra forma, seria um trabalho manual tedioso.

O modelo "Fundamentos do Setor" inclui vários conjuntos de regras pré-definidos na pasta "Conjuntos de Regras". Vale a pena estudá-los, não apenas pelo que fazem, mas pela forma como podem levar você a refletir sobre como priorizar as otimizações. No modelo, um conjunto de regras controla o modelo do robô, que requer alto nível de detalhe nas articulações do braço — onde os usuários concentram sua atenção —, mas pode se contentar com um nível de detalhe menor na base, onde é menos visível. Outro lida com o ambiente do armazém, onde a geometria é mais simples, mas há uma grande quantidade dela, por isso faz sentido uma geração agressiva de LOD.

Existe um conjunto de regras que aplicará as ações de redução de dados e limpeza da hierarquia como um processo automatizado durante a importação. O modelo também oferece outro conjunto de regras que incorpora automaticamente a oclusão ambiente aos dados dos vértices para aumentar a fidelidade visual do modelo. Por fim, existem conjuntos de regras que mostram como você pode substituir materiais e objetos durante o processo de importação

Para criar um conjunto de regras:

1. Na pasta do projeto, clique com o botão direito do mouse e selecione Criar > Transformador de ativos > Conjunto de regras.

2. Defina o nome do seu conjunto de regras.

3. Edite o conjunto de regras na guia dedicada (que se abre automaticamente ao lado do Inspetor)

4. Adicione itens à sequência, como, por exemplo, filtros, ações e regras adicionais. As regras são aplicadas sequencialmente, de cima para baixo.

Se você observar a imagem abaixo, à direita, há um Conjunto de Regras aberto. A primeira ação está definida por padrão como “Obter”. Isso selecionará um objeto na cena, e tudo o que vier a seguir será aplicado a esse objeto selecionado.

Um conjunto de regras (à direita) para um dos modelos de robô

Um conjunto de regras (à direita) para um dos modelos de robô

A ação “Selecionar” selecionará todo o modelo do robô, e quaisquer ações subsequentes serão aplicadas a todo o modelo; portanto, você precisa de uma maneira de localizar os elementos específicos dentro dele aos quais deseja aplicar as ações subsequentes. Para isso, adicione uma ação de filtragem a esta regra e defina a ação como “Filtrar por metadados” para utilizar os metadados importados junto com o modelo CAD.

Reimportar recursos com eficiência

Conjuntos de regras como os acima podem ser executados manualmente da seguinte forma:

  • Selecione o objeto ou os objetos aos quais deseja aplicar
  • Selecionar o conjunto de regras e clicar no botão Executar

No entanto, você também pode configurá-lo para que os conjuntos de regras sejam aplicados automaticamente como parte do processo de importação. Para fazer isso, selecione o ScriptableObject de configurações de importação criado na pasta Assets > 3DModel; você verá no Inspector que o botão Importar agora se chama Reimportar.

Selecione o botão "Rule Engine" e, em seguida, especifique o conjunto de regras que deseja executar durante o processo de importação.

Se você clicar no botão “Reimportar” após definir essa configuração, sempre que o modelo CAD for reimportado, a regra especificada será aplicada a ele. Você também pode aninhar várias regras e conjuntos de regras dentro da regra de importação para garantir que todas sejam aplicadas durante o processo de importação.

Assista: Conjuntos de regras

YouTube video

Assista: Conjuntos de regras avançadas

YouTube video
Experimente o Unity Industry gratuitamente

Adicionar um novo robô ao modelo

Depois de analisar como importar, otimizar e, em seguida, automatizar todo esse processo, é hora de transformar esses dados CAD em um robô funcional e orientado por dados dentro de uma simulação.

O modelo fornece todos os componentes necessários para acompanhar o processo, incluindo scripts em C# para conectar seu modelo à interface do usuário e configurá-lo de forma que você possa alternar entre as diferentes variantes do robô e testar o comportamento do robô em tempo real.

Vamos dar uma olhada em um dos fluxos de trabalho explicados no modelo.

Há vários robôs na cena do armazém, e você deseja configurar qualquer novo modelo de robô para que ele tenha a mesma funcionalidade que os demais. Para isso, você importará o modelo novamente, um processo eficiente e previsível agora que você já tem conjuntos de regras definidos. Aqui estão os passos:

1. Em Projeto > Modelos 3D, você encontrará o recurso ScriptableObject de importação que contém todas as configurações definidas anteriormente. Abra o Inspector e verifique na guia "Rule Engine" se as regras de importação estão configuradas.

A guia "Motor de Regras" (à direita) com conjuntos de regras previamente definidos para este modelo

A guia "Motor de Regras" (à direita) com conjuntos de regras previamente definidos para este modelo

2. Na guia Modelo, verifique se a opção Importar metadados está selecionada. Isso é fundamental para que os filtros e todos os conjuntos de regras funcionem.

3. Depois de reimportar o modelo, você o encontrará em Recursos > Modelos 3D e, a partir daí, poderá arrastá-lo e soltá-lo na janela de cena.

4. Na Hierarquia, você verá que os robôs existentes na cena estão aninhados sob um GameObject Robots pai. Expanda esta opção, selecione um dos objetos robôs filhos e você verá que ele possui um script Robot associado a um ScriptableObject de dados do robô, que contém todas as informações de cada robô.

O objeto programável SO do Robot Data, que contém todas as informações sobre cada robô

O objeto programável SO do Robot Data, que contém todas as informações sobre cada robô

5. Se você acessar a pasta Assets > Warehouse > RobotData, verá que cada um dos quatro robôs atualmente presentes na cena possui seu próprio ScriptableObject RobotDataSO. Você precisará associar o mesmo ScriptableObject ao novo robô.

6. Para isso, clique com o botão direito do mouse na pasta “Assets” e selecione Criar > Modelo do setor > Dados do robô. Dê a ele um nome que corresponda ao número do modelo do robô.

7. Clique no novo robô que você adicionou para abrir o Inspetor dele; em seguida, clique em “Adicionar Componente”, procure o script do robô no menu suspenso (chamado Robot.cs) e adicione-o.

8. Arraste o novo ScriptableObject do robô para o campo Dados do novo script, e ele adicionará automaticamente todos os outros scripts e componentes necessários para que esse robô funcione da mesma forma que os demais.

Siga os tutoriais do modelo para ver cada etapa: como importar seus dados CAD, integrá-los a um aplicativo em tempo real para criar um Digital Twins e configurar os controles para monitorar os robôs pela interface do usuário.

Assista: Interface do usuário e interatividade

YouTube video

Crie um painel de monitoramento com o UI Toolkit

O Unity possui dois sistemas para a criação de interfaces de usuário (UI): Unity UI (uGUI) e Kit de ferramentas de interface do usuário. O Industry Fundamentals utiliza o UI Toolkit.

O UI Toolkit foi projetado para oferecer desempenho ideal e adaptabilidade em todas as plataformas e é inspirado em tecnologias web padrão. Se você tem experiência no desenvolvimento de páginas da web ou aplicativos, os conceitos básicos do UI Toolkit devem ser familiares para você. O UI Toolkit oferece ferramentas e fluxos de trabalho poderosos que aproveitam seu conhecimento prévio de linguagens de marcação e folhas de estilo.

Kit de ferramentas de interface do usuário: Inspirado em tecnologias web padrão

Com o UI Toolkit, você pode separar a estrutura, o estilo e o comportamento da sua interface do usuário, da mesma forma que faria com HTML, CSS e JavaScript.

O UXML é uma linguagem de marcação inspirada no HTML e no XML que define a estrutura da interface do usuário e modelos reutilizáveis. Embora seja possível criar interfaces de usuário em C#, o uso do UXML permite trabalhar nos layouts da interface de usuário diretamente na janela UI Builder do Unity, o que proporciona uma experiência de criação visual.

As CSS são folhas de estilo que aplicam estilos visuais e regras de layout à interface do usuário. Assim como o CSS, o USS suporta um subconjunto das propriedades padrão do CSS. Embora seja possível definir estilos em C#, recomenda-se o uso do USS, pois ele garante que os estilos possam ser reutilizados em toda a interface do usuário, criando uma aparência unificada e simplificando seu gerenciamento.

Criação da interface do painel no UI Builder

Criação da interface do painel no UI Builder

O UI Toolkit oferece um sistema de vinculação de dados que permite associar propriedades de elementos da interface do usuário a fontes de dados. Isso significa que, quando os dados são alterados, a interface do usuário é atualizada automaticamente, e vice-versa.

Nesta seção, vamos examinar o design do painel e como ele funciona com a vinculação de dados.

Instalação elétrica do painel de instrumentos no curso Fundamentos da Indústria

A interface do painel de controle, com uma lista de robôs à esquerda e detalhes e controles à direita

A interface do painel de controle, com uma lista de robôs à esquerda e detalhes e controles à direita

O painel de controle possui seções distintas, com informações gerais na parte superior, uma lista de robôs à esquerda e detalhes e controles à direita. O arquivo USS do painel define um sistema de design completo, incluindo variáveis de cor e espaçamento, além de classes para elementos repetidos, como botões e indicadores de status.

Cada robô possui três estados de status: normal, aviso ou crítico, que precisam ser representados visualmente. O USS define três classes – status-padrão, status-alerta e status-crítico, cada uma com uma cor de fundo distinta. Um script em C# adiciona e remove essas classes com base no estado do robô. A saúde diminui com o tempo quando a bateria do robô fica abaixo de um limite crítico; quanto mais baixa a bateria, mais rápida é a perda de saúde. Se o nível de saúde ou a carga da bateria do robô atingirem os níveis de alerta ou crítico, as classes de status são atualizadas de acordo, fornecendo aos operadores um sinal visual imediato no painel de controle.

Cada robô possui três estados de status: normal, aviso ou crítico, que precisam ser representados visualmente.

Cada robô possui três estados de status: normal, aviso ou crítico, que precisam ser representados visualmente.

Em um projeto real, essa separação significa que os designers podem ajustar a cor do aviso sem precisar mexer no código, e os programadores podem adicionar novos tipos de status sem precisar entender de CSS.

Script do UIController

O script UIController integra todos os elementos. Ele armazena em cache referências a elementos da interface do usuário na inicialização, registra callbacks de eventos para botões e controles deslizantes, assina os eventos do Gerenciador de Robôs e atualiza a interface do usuário quando o estado muda. O modelo mostra as duas abordagens para atualizações da interface do usuário: vinculação de dados para valores contínuos, como o nível da bateria, e código explícito para eventos discretos, como a seleção do robô.

Ligação de dados

Ligação de dados no UI Toolkit

Ligação de dados no UI Toolkit

Em vez de escrever código que atualize manualmente cada rótulo e barra de progresso, você declara ligações no UXML que conectam as propriedades dos elementos da interface do usuário às propriedades da fonte de dados. Quando os dados são alterados, a interface do usuário é atualizada automaticamente.

O modelo vincula os elementos da interface do usuário diretamente ao ScriptableObject RobotDataSO de cada robô. Isso mostra o nível da bateria, o estado de conservação, a temperatura e a velocidade. O UXML define ligações como "o texto deste rótulo deve corresponder à propriedade Battery desta fonte de dados, formatado como uma porcentagem".

Essa ligação é bidirecional; por exemplo, o controle deslizante de amplitude do ARM não apenas exibe um valor, como também o define. Quando o usuário arrasta o controle deslizante, a propriedade associada é atualizada, o que move o braço robótico. A interface do usuário passa a ser uma superfície de controle, e não apenas um visor.

Os conversores são uma parte essencial da vinculação de dados, pois fazem a ponte entre os tipos de dados e os formatos de exibição. O valor da bateria é um float entre 0 e 100 na fonte de dados, mas você deseja exibir “75%” em vez de “75,0”. O modelo inclui recursos de conversão que registram funções de formatação. Você faz referência a esses conversores em suas ligações, e eles transformam os valores no caminho entre os dados e a exibição.

O minimapa

O minimapa no painel; o fundo do minimapa é uma textura de renderização proveniente de uma câmera aérea

O minimapa no painel; o fundo do minimapa é uma textura de renderização proveniente de uma câmera aérea

O minimapa demonstra a renderização personalizada no UI Toolkit. O fundo do minimapa é uma textura de renderização proveniente de uma câmera aérea. Os pontos de posição do robô são elementos da interface do usuário posicionados com base em coordenadas globais transformadas para o espaço da interface do usuário. A cada quadro, o código lê a posição do robô no mundo, calcula onde ela se corresponde no elemento do minimapa e atualiza a posição do ponto – uma técnica simples, mas eficaz, para mostrar relações espaciais.

Assista: Análise aprofundada da interface do usuário

YouTube video

Configurar a navegação automática e manual

O NavMesh pré-calculado no armazém

O NavMesh pré-calculado no armazém

Como os robôs sabem para onde podem se mover? O armazém está repleto de obstáculos – prateleiras, paletes, outros robôs – e cada robô precisa encontrar caminhos para contorná-los. Essa é a função do sistema de navegação por IA do Unity.

Se você abrir a cena do armazém no Editor, vá até a barra de ferramentas superior e clique no botão “Alternar visibilidade”, a NavMesh aparecerá na cena como uma sobreposição azul. Um NavMesh é uma malha gerada pelo Unity para aproximar as áreas transitáveis e os obstáculos em um ambiente, com o objetivo de facilitar a busca de caminhos e a navegação controlada por IA.

A opção mais eficiente é pré-calcular o NavMesh na cena, em vez de criá-lo em tempo de execução. Durante o processo de simulação, o sistema de navegação analisa o cenário e, com base nos parâmetros definidos por você, identifica todas as áreas onde os agentes (neste caso, os robôs) podem se mover.

O sistema de navegação por IA do Unity controla a lógica de movimento tanto para o controle autônomo quanto para o manual.

O sistema de navegação por IA do Unity controla a lógica de movimento tanto para o controle autônomo quanto para o manual.

No modelo, cada robô conhece seu percurso porque possui um componente NavMesh Agent associado. Ele também possui algumas configurações predefinidas que você pode ajustar, como, por exemplo, a velocidade, os parâmetros de aceleração, o raio de desvio e a altura.

O componente Nav Mesh Agent

O componente Nav Mesh Agent

Embora grande parte da lógica de movimento seja gerenciada pelo sistema NavMesh, em Assets > Warehouse > Scripts também há um script chamado RandomAgentMovement que se encarrega de definir os destinos-alvo. A cena possui destinos específicos predefinidos. Durante a execução, este script atribuirá um desses destinos a um robô e, em seguida, verificará constantemente a distância entre o robô e esse destino. Se o robô chegar a esse destino, ele fica parado ali por alguns segundos. Em seguida, o script define um novo destino; graças ao NavMesh, o robô determina automaticamente e segue o caminho ideal até o seu destino.

RandomAgentMovement script

RandomAgentMovement script

Pode surgir um desafio em uma aplicação em que um número variável de objetos possa ser controlado manualmente em conjunto com agentes autônomos, como os robôs. Os robôs precisam estar atentos a objetos em movimento, como uma porta que se abre e se fecha ou uma caixa em movimento. Para que os robôs tenham consciência desses movimentos, isso deve ser incorporado à configuração do NavMesh.

Para lidar com isso no Industry Fundamentals, um componente NavMeshObstacle é adicionado ao sistema NavMesh. Isso instrui o NavMesh a delimitar uma área específica ao redor do robô. À medida que o robô se move, a área se move junto com ele, impedindo que os robôs atravessem obstáculos como prateleiras ou colidam com outros robôs.

Se você alternar para o modo manual para controlar os robôs, o componente NavMeshObstacle será atribuído e ativado, enquanto o componente NavMeshAgent será desativado.

Robôs de armazém se deslocando ao longo da NavMesh

Robôs de armazém se movimentando na NavMesh

Unity: Crie 3D em tempo real mais rapidamente – navegação robótica automática ou manual

A alternância entre os modos é feita por meio do objeto ScriptableObject do robô. A propriedade OperationMode pode ter o valor Auto ou Manual, e vários componentes verificam esse valor para decidir o que fazer. A interface do usuário possui botões para alternar entre os modos, o que atualiza o conjunto de dados, fazendo com que os componentes reajam. Essa abordagem baseada em dados significa que adicionar novos modos ou alterar o comportamento dos modos não exige a modificação de vários scripts.

Assista: Guia passo a passo do NavMesh

YouTube video

Um sistema de câmera virtual com a Cinemachine

O modelo "Fundamentos da Indústria" utiliza o sistema de câmera virtual Cinemachine (que você pode baixar como um pacote) de três maneiras:

  • Para criar a câmera que acompanha o robô ativo e para garantir uma transição suave entre os diferentes robôs à medida que você seleciona diferentes cartões
  • Para manter a câmera focada no robô enquanto ele se move pelo armazém e garantir que você não passe através de objetos
  • Para enviar a visualização 3D diretamente para a interface do painel

O conceito central é simples: Você tem um GameObject de câmera do Unity na sua cena, gerenciado por um componente Cinemachine Brain, e várias câmeras virtuais que definem possíveis planos. O componente Brain alterna entre as câmeras virtuais com base em suas prioridades. Apenas a câmera virtual ativada com a prioridade mais alta controla o que você vê.

As câmeras em Fundamentos da Indústria

Se você abrir a cena do armazém, verá alguns robôs espalhados pelo local, fornecendo elementos com os quais você pode trabalhar antes de adicionar seu próprio robô. Você precisará se certificar de que, ao adicionar seu próprio robô à cena, ele também tenha uma câmera virtual atribuída a ele.

Na Hierarquia, localize o GameObject “Cinemachine Shots” que fornece uma tomada padrão.

Unity: Compilação de 3D em tempo real mais rápida — Câmeras virtuais Cinemachine em armazéns

Câmeras virtuais da Cinemachine no armazém

Ao clicar em “Reproduzir”, cada robô terá sua própria câmera de “acompanhamento”, adicionada por meio de um script durante a execução. Esse script obtém uma lista do número de robôs presentes na cena, incluindo os recém-adicionados, e, para cada um deles, cria um componente Cinemachine Camera, bem como um componente Third-Person Follow. O componente "Third Person Follow" permite criar uma câmera posicionada atrás do objeto em movimento, que acompanhará o objeto designado como alvo de rastreamento.

O GameObject RobotFollowCam com componentes do Cinemachine associados, incluindo

O GameObject RobotFollowCam com componentes do Cinemachine associados, incluindo

Na interface do painel, o Cinemachine é implementado de duas maneiras diferentes: Uma câmera 3D para mostrar a câmera atualmente renderizada e outra para o minimapa. O minimapa utiliza uma textura de renderização com uma câmera separada que renderiza a vista de cima e, em seguida, envia essa imagem para a textura de renderização. A câmera 3D não utiliza uma textura, mas sim reproduz a imagem capturada pela câmera real do aplicativo em execução, embora através de um recorte retangular na interface do usuário.

O Cinemachine permite criar sistemas de câmera flexíveis, nos quais o “cérebro” do Cinemachine se encarrega de toda a lógica de alternância entre essas diferentes câmeras, criando câmeras virtuais que funcionam como marcadores de posição para a câmera principal real. Por fim, ele oferece componentes adicionais, como a câmera de acompanhamento em terceira pessoa, que assume grande parte do trabalho pesado normalmente associado ao desenvolvimento de um aplicativo em tempo real.

Experimente o Unity Industry gratuitamente

Assista: Guia passo a passo do Cinemachine

YouTube video

Otimize a iluminação com o Universal Render Pipeline

O Universal Render Pipeline (URP) é a solução da Unity para renderização escalável. Ele foi projetado para produzir imagens de alta qualidade e, ao mesmo tempo, funcionar com eficiência em todos os tipos de dispositivos, desde computadores de mesa de última geração até dispositivos móveis e navegadores da web. Para aplicações industriais, essa flexibilidade é fundamental. Você pode precisar que o mesmo aplicativo funcione como um quiosque em uma feira, como um aplicativo web para clientes remotos e como um aplicativo para tablet para técnicos de campo.

A configuração URP do modelo está na pasta Configurações. O recurso "Render Pipeline" controla as configurações globais de renderização. Compreender a função dessas configurações ajuda você a fazer ajustes bem pensados nos seus próprios projetos.

Um dos robôs da cena do armazém no modelo "Fundamentos da Indústria"

Um dos robôs da cena do armazém no modelo "Fundamentos da Indústria"

Renderização Forward+

O modelo utiliza a renderização Forward+, que lida com várias fontes de luz de forma eficiente, mantendo a compatibilidade com uma ampla variedade de equipamentos. O Forward+ funciona agrupando as luzes no espaço da tela; assim, adicionar mais luzes à sua cena não afeta negativamente o desempenho, como aconteceria com a renderização direta tradicional.

O anti-aliasing suaviza as bordas irregulares que aparecem onde a geometria se encontra com o fundo. O modelo utiliza MSAA em 4x para o nível de alta qualidade, 2x para o nível médio e nenhum para o nível baixo. O MSAA é rápido em GPUs modernas, mas consome mais memória; por isso, a abordagem em camadas permite que você ajuste o desempenho de acordo com o dispositivo de destino.

Use cascatas de sombras

As sombras enriquecem a qualidade visual, mas podem exigir um grande esforço computacional. O modelo utiliza sombras em cascata, que geram sombras de alta resolução próximas à câmera e sombras de menor resolução à distância.

Uma combinação de luzes de forno e sondas de luz

A iluminação no modelo utiliza uma abordagem híbrida. Para elementos geométricos estáticos, como o piso, as paredes e as estantes do armazém, utilize iluminação pré-calculada. Objetos dinâmicos, como os robôs, utilizam iluminação em tempo real e sondas de luz.

As sondas de luz são pontos invisíveis na sua cena que analisam a iluminação pré-calculada. Quando um objeto dinâmico se aproxima de uma sonda de luz, ele capta a iluminação ambiente daquele local. O projeto conta com sensores de luz espalhados por todo o armazém, de modo que os robôs pareçam integrados ao ambiente, em vez de ficarem simplesmente sobre ele.

O sistema LightRig acrescenta mais uma camada. Cada robô possui um conjunto de holofotes que se acendem quando esse robô é selecionado. Isso cria um foco visual no robô ativo sem exigir uma iluminação global dispendiosa. A implementação é simplesmente um componente que liga e desliga as luzes de acordo com o estado da seleção.

Cada robô possui um conjunto de holofotes que se acendem quando esse robô é selecionado.

Cada robô possui um conjunto de holofotes que se acendem quando esse robô é selecionado.

A iluminação do ambiente provém de uma imagem HDRI que proporciona uma luz ambiente sutil, preenchendo as sombras e oferecendo às superfícies metálicas algo para refletir. O modelo inclui várias opções de HDRI para que você possa ver como diferentes ambientes de iluminação afetam o clima da cena.

Scripts em C#

Vamos dar uma olhada nos scripts e nos ScriptableObjects usados no modelo.

Conforme descrito nas seções anteriores, todos os detalhes de um robô, como seus movimentos, como ele se desmonta e como ele se comunica com a interface do usuário, estão contidos em um ScriptableObject. Se você acessar a visualização do Projeto e, em seguida, Recursos > Armazém > RobotData, encontrará o ScriptableObject de cada robô. Abra o Inspetor de um desses robôs e você encontrará detalhes como o nome, o modo de operação atual, o status atual, a variante ativa, a bateria, o estado de saúde, a temperatura de funcionamento, a velocidade e assim por diante. O ScriptableObject não faz nada por conta própria; nesse contexto, ele é simplesmente um contêiner que armazena todos os dados específicos desse modelo.

Há também um ScriptableObject que contém dados sobre toda a frota de robôs, incluindo os níveis médios de bateria de todos os robôs, quantos deles estão em movimento e quantos se encontram em cada categoria de status. Tudo isso é exibido na interface do painel.

Os scripts são usados para conectar todos esses dados aos robôs propriamente ditos e conferir-lhes funcionalidades, como, por exemplo, o movimento ou a alternância entre as diferentes variantes. No modelo, você os encontrará na pasta “Warehouse scripts”. Existem scripts para controlar os robôs e para vincular todos os ScriptableObjects a um modelo real. Selecione uma dessas opções e você verá que há scripts de Robô, Simulador e Variante.

RobotManager

O script RobotManager ativa todos os dados no momento da inicialização. Este script é um singleton, portanto, há apenas uma instância dele em toda a cena. Quando o aplicativo for iniciado, ele detectará todos os robôs presentes na cena e os armazenará em uma lista. Este roteiro contém dois eventos cruciais: ActiveRobotChanged, que é acionado sempre que um usuário seleciona um robô diferente, e RobotListChanged, que é acionado quando um robô é adicionado ou removido da lista.

Este script é a espinha dorsal da comunicação de todo o projeto. À medida que for analisando outros scripts, você verá que muitos deles estão inscritos nesses eventos.

Unity_Compilação de 3D em tempo real mais rápida_RobotManager_ActiveRobotChanged

O script RobotManager

O script OverallDataUpdater é executado a cada quadro e instrui o ScriptableObject OverallData a percorrer os dados de cada robô, somar os números e atualizar o resumo da frota. Portanto, embora os dados gerais contenham todas as informações, este é o script que realmente faz tudo funcionar.

Unity_Compilação de 3D em tempo real mais rápida_Script OverallDataUpdater

O script OverallDataUpdater

Cada robô usa o NavMesh para saber onde pode e onde não pode se mover. Mas eles também precisam de um objetivo para seguir, e, como explicado anteriormente, cada robô pode operar no modo automático ou manual. Para gerenciar tudo isso, o modelo possui um script RobotEditor, acessível em Recursos > Armazém > Scripts > Editor. Este script adiciona automaticamente tudo o que você precisa a um prefab de robô quando você atribui um ScriptableObject a ele.

O script RandomAgentMovement fica ativo quando os robôs estão no modo automático. Este script possui uma série de destinos. Quando o script é iniciado, ele escolhe um aleatoriamente e envia o agente até lá. A cada quadro, ele verifica se o agente chegou. Ele verifica a distância restante, se o trajeto ainda está sendo calculado e se o agente parou de se mover. Assim que essas três condições forem atendidas, ele aguarda um intervalo de tempo aleatório (de um a três segundos), escolhe um novo alvo e o robô reinicia todo o processo.

Como você verá na simulação, os robôs circulam pelo armazém e, em cada destino, param por um instante como se estivessem fazendo algo ali, depois se viram e seguem para o próximo alvo.

E, como você deve se lembrar, ao mudar para o modo manual, o Robotscript desativa o componente NavMesh Agent e ativa o componente NavMesh Obstacle com a função de contornamento ativada. Um robô com esse componente ativado se deslocará sobre a NavMesh e abrirá um caminho nela ao seu redor. Quando outro robô no modo automático se aproximar dele, não conseguirá passar por ele, pois há uma abertura no NavMesh; ele encontrará um novo caminho ao redor dele. Quando você voltar para o modo automático, esse componente Nav Mesh Obstacle será removido e o NavMeshAgent será reativado.

O script RobotDataSimulator simula o que aconteceria em um ambiente real, como o esgotamento das baterias à medida que os robôs se movimentam, avarias nos equipamentos, etc. Este script também grava atualizações no ScriptableObject, que, por sua vez, informa ao painel da interface do usuário o que deve ser exibido.

Por fim, para cada modelo, o script Variant é onde você pode especificar as diferentes variantes e seu comportamento. Quando você clicar no botão que alterna entre as variantes, este script ativará e desativará as variantes correspondentes.

Assista: Arquitetura C# e ScriptableObjects

YouTube video

Otimizações de desempenho

As aplicações industriais muitas vezes precisam funcionar bem em diversos dispositivos de hardware, o que significa que é preciso refletir cuidadosamente sobre como otimizar a experiência. Aqui estão algumas das estratégias utilizadas no modelo.

  • Gerenciamento da frequência de atualizações: Nem tudo precisa acontecer a cada quadro. O simulador de telemetria é atualizado a cada quadro, pois os usuários esperam um feedback instantâneo ao dirigir manualmente. As estatísticas agregadas são atualizadas uma vez por segundo, pois as médias de toda a frota não variam de forma significativa mais rapidamente do que isso. O modelo permite configurar isso, para que você possa ajustar o equilíbrio entre a capacidade de resposta e o uso da CPU.
  • Armazenamento em cache de consultas da interface do usuário: O método Q do UI Toolkit localiza elementos por nome ou classe, o que é prático, mas tem algumas desvantagens. Chamar a função Q a cada quadro para localizar o mesmo elemento desperdiça ciclos. O modelo realiza uma consulta única no momento da inicialização, armazena as referências nos campos e, a partir daí, utiliza essas referências armazenadas em cache.
  • Otimização de consultas ao NavMesh: O cálculo completo do caminho, em que se calcula o trajeto inteiro de A a B, é dispendioso, mas a validação de um único ponto é mais econômica. O controlador manual utiliza NavMesh.SamplePosition em vez de CalculatePath, pois precisa apenas saber se o próximo passo é válido, e não a rota completa.
  • LODs: O modelo do robô possui vários níveis de detalhe, selecionados automaticamente de acordo com o tamanho da tela. Em um plano de close, você verá todos os detalhes, enquanto um robô mais distante apresenta uma geometria simplificada que ainda assim é facilmente identificável. Os limites de LOD do modelo foram ajustados para o ambiente de armazém; você deve ajustá-los de acordo com as distâncias de visualização típicas da sua cena.
  • Resolução da textura de renderização: Isso equilibra a qualidade com a memória da GPU e a taxa de preenchimento. A câmera de segurança e o minimapa não precisam de resolução total, por isso são renderizados com texturas menores. Isso reduz o número de pixels que a GPU precisa preencher e a memória que essas texturas consomem.
  • Filtragem na camada física: O modelo coloca os robôs em uma camada chamada "Bot" e configura as opções de física para que apenas as camadas relevantes entrem em colisão. Os robôs colidem com o solo e entre si, mas não com alvos de raycast da interface do usuário nem com outros sistemas que utilizam coliders para fins não físicos.
  • Níveis de qualidade: O modelo define três níveis com configurações progressivamente reduzidas. Durante a execução, você deve verificar as capacidades do dispositivo ou definir as configurações do usuário e, em seguida, chamar QualitySettings.SetQualityLevel para fazer a alteração. O recurso URP Render Pipeline permite substituições por camada, de modo que você pode reduzir a resolução das sombras em dispositivos de baixo desempenho sem afetar os de alto desempenho.

Por fim, as ferramentas de análise de desempenho do Unity são essenciais para identificar gargalos. Analise o hardware de destino, identifique os pontos críticos e otimize-os especificamente, em vez de otimizar tudo prematuramente.

O ecossistema da Unity Industry

A Unity Industry inclui os produtos e o suporte necessários para criar, gerenciar e expandir aplicativos multiplataforma. Projetado para criadores do setor, abrange todas as etapas, desde a integração de dados até a implantação.

Junte-se às principais empresas dos setores de manufatura, automotivo, varejo e outros que utilizam tecnologia 3D em tempo real para obter vantagem competitiva, acelerar o tempo de lançamento no mercado e otimizar recursos. Da visualização de produtos às simulações, o Unity Industry possibilita experiências imersivas.

Baixe o modelo “Fundamentos do Setor”

Se você é assinante do Unity Industry:

1. Abra o Unity Hub e atualize para o Unity 6.4

2. Crie um novo projeto e procure por “Fundamentos da Indústria”, ou acesse a categoria “Aprendizagem” e selecione o modelo lá.

Se você não tiver uma assinatura do Unity Industry:

1. Acesse nossa página de avaliação gratuita e siga as instruções para obter uma avaliação gratuita.

2. Assim que seu período de avaliação estiver ativo, siga os mesmos passos que os assinantes do plano Industry.

Obtenha o ebook

Preencha este formulário para ter acesso a insights e soluções de ponta oferecidos por especialistas do setor