Desde prototipos hasta aplicaciones de capacitación, gemelos digitales, interfaces hombre-máquina y configuradores de productos, prácticamente no hay límite para la variedad de aplicaciones que puede desarrollar y lanzar con Unity Industry.
¿Tienes curiosidad por saber cómo tu organización puede usar Unity, eres un nuevo suscriptor o un desarrollador de Unity Industry con más experiencia que busca mejorar sus habilidades? Tanto si abres el Editor por primera vez como si eres un desarrollador con mucha experiencia que ha publicado múltiples proyectos, siempre es útil aprender a aprovechar al máximo las potentes funciones de Unity, para que tu experiencia laboral diaria sea lo más productiva y agradable posible.
Aumente la productividad con la conversión de CAD a 3D, una interfaz de usuario adaptable, una arquitectura de código y mucho más.
Esta guía ofrece una descripción general de la plantilla Unity Industry Fundamentals, una nueva plantilla de aprendizaje integrada en el editor para desarrolladores de Unity Industry .

La plantilla Fundamentos de la industria está disponible en Unity Hub para los suscriptores de Unity Industry o para aquellos con una prueba gratuita de 30 días.
Conclusiones clave de los fundamentos de la industria
A través de una serie de tutoriales, la plantilla Unity Industry Fundamentals te muestra los pasos para implementar características importantes en proyectos de Unity Industry , incluyendo:
- Cómo utilizar el kit de herramientas Asset Transformer para convertir y optimizar activos CAD en activos 3D listos para usar en un proyecto industrial en tiempo real.
- Cómo construir una HMI y conectar la interfaz de usuario con datos en tiempo real.
- Cómo implementar un sistema de navegación que admita tanto la navegación automatizada como la manual.
- Cómo configurar cámaras virtuales para que los usuarios siempre tengan la vista que necesitan en simulaciones de entornos complejos y extensos.
- Cómo diseñar scripts de C# que gestionen el comportamiento del robot, la administración del estado y el flujo de datos utilizando ScriptableObjects para mantener la capa de datos desacoplada.
El objetivo de Industry Fundamentals es ayudarte a que tu experiencia de desarrollo con Unity sea más eficiente, centrada y productiva. Los consejos que aprenderás son aplicables a muchos tipos de aplicaciones industriales 3D en tiempo real, incluidas las interfaces hombre-máquina (HMI), las simulaciones de entrenamiento, los gemelos digitales y los configuradores de productos.
Obtén la plantilla de Fundamentos de la Industria
Antes de empezar, aquí tienes los pasos para encontrar y descargar la plantilla, si aún no lo has hecho.
Si eres suscriptor de Unity Industry :
1. Abre Unity Hub y actualiza a Unity 6.4.
2. Crea un nuevo proyecto y luego busca Fundamentos de la industria , o ve a la categoría Aprendizaje y selecciona la plantilla que encuentres allí.
Si no tienes una suscripción a Unity Industry :
1. Visita nuestra página de prueba gratuita y sigue las instrucciones para obtener una prueba gratuita.
2. Una vez que su período de prueba esté activo, siga los mismos pasos que para los suscriptores del plan Industry.
Una plantilla que puedes explorar y modificar.

La interfaz de usuario del panel de control, en modo automático, con el minimapa del almacén.
La plantilla consta de cuatro tutoriales que le guiarán a través de los flujos de trabajo y los pasos necesarios para crear una aplicación industrial interactiva en 3D . Una vez abierto el proyecto en el editor de Unity , encontrarás la escena finalizada, llamada Warehouse, en la carpeta Scenes. Esta escena representa un entorno de almacén completamente construido, con múltiples robots distribuidos por el suelo, listos para recuperar, almacenar y mover el inventario.
La escena de demostración está diseñada para la creación rápida de prototipos; simplemente arrastre y suelte su propio modelo 3D en la escena, conecte un solo componente y todo se cableará automáticamente. Tu recurso aparecerá en la interfaz de usuario y se comportará instantáneamente como un robot autónomo, moviéndose por el entorno y respondiendo a las entradas y salidas de la interfaz de usuario.
Abre la vista del juego, entra en el modo de juego y comienza a interactuar en el almacén simulado a través de una interfaz de usuario que te permite controlar y supervisar cada uno de los robots, mostrando datos en tiempo real como el nivel de batería y el estado de salud de cada robot. La interfaz de usuario proporciona un mapa en miniatura que muestra la ubicación actual de los robots. También puedes anular manualmente algunos de los ajustes del robot cambiando del modo automático al manual, y controlar el movimiento de cada robot con las teclas WASD. Ajusta la velocidad de cada robot y usa el control deslizante para alargar o acortar su brazo.
Analicemos las principales características de esta simulación de almacén.
Mirar: Empezando

El kit de herramientas de transformación de activos: Desde CAD hasta activos 3D optimizados

Uno de los modelos 3D de robots de la escena de ejemplo principal del almacén en la plantilla Fundamentos de la industria.
El software CAD prioriza la precisión matemática y el detalle geométrico en sus modelos, mientras que las aplicaciones en tiempo real necesitan equilibrar la calidad visual con consideraciones prácticas de rendimiento, como un número manejable de polígonos, un muestreo de texturas eficiente y jerarquías que pueda descartar y agrupar.
El Unity Asset Transformer Toolkit, incluido en la licencia Unity Industry , es el puente entre los datos CAD de su organización y sus proyectos de Unity . Integra a la perfección tus datos existentes con Unity mediante flujos de trabajo automatizados de preparación de datos, ahorrándote tiempo y esfuerzo. Puedes importar cualquier tipo de archivo 3D o CAD y eliminar la necesidad de múltiples importaciones o de recrear el modelo, con control total sobre el tamaño y la calidad de la malla, lo que optimiza tus datos para un mejor rendimiento en los dispositivos de destino.
En el ejemplo de Fundamentos de la Industria, verá cómo importar un nuevo recurso de robot a Unity. El modelo del robot, que se basa en el archivo CAD original, es un elemento pesado con un aspecto tosco que no resulta adecuado para una presentación pulida. El kit de herramientas Asset Transformer se utiliza para convertir y optimizar los modelos para su uso en una aplicación 3D interactiva adecuada para plataformas como ordenadores de escritorio y la web.
Para ver cómo instalar y abrir Asset Transformer Toolkit en el Editor, mira el vídeo al final de esta sección.
Comencemos por examinar la barra de herramientas.
Explorar la barra de herramientas de Asset Transformer Toolkit

La caja de herramientas para el kit de herramientas Asset Transformer
A continuación, se ofrece una breve explicación de las acciones disponibles en la barra de herramientas:
- Importar modelo : Haz clic aquí para iniciar el proceso de importación y traer tus datos CAD a Unity.
- Malla y optimización : Utilice estas herramientas para simplificar la geometría y eliminar cualquier detalle innecesario, como por ejemplo agujeros o caras internas.
- Remallado : Esta función permite reconstruir completamente la geometría para casos de uso de alto rendimiento.
- Jerarquía : Utilice estas herramientas para limpiar cualquier estructura de objetos desordenada que se haya transferido desde los ensamblajes CAD.
- Transformar : Solucione rápidamente los problemas de alineación y puntos de pivote en el modelo.
- UV y Colliders : Utilice estos ajustes para generar los datos que Unity necesita para el texturizado y las interacciones basadas en la física.
Conserva la configuración y las modificaciones del modelo al importarlo.
Esta guía no cubre el proceso de importación en detalle; el tutorial integrado en el editor y el vídeo al final de esta sección le guiarán a través de todos los pasos importantes.
Lo fundamental a destacar aquí es que, al seleccionar el archivo que se desea importar, se crea un ScriptableObject con el mismo nombre que el modelo en la carpeta Assets de la ventana Proyecto.
Este no es el modelo real; la ventaja es que el ScriptableObject contiene una colección de configuraciones que puedes usar para importar el modelo, lo que te permite conservar sus configuraciones y modificaciones. Si se realizan cambios en el modelo CAD y necesita volver a importarlo, no tendrá que configurarlo todo desde cero. Todas esas configuraciones se guardarán en el ScriptableObject.

Al seleccionar el archivo que desea importar, se crea un ScriptableObject con el mismo nombre que su modelo en la carpeta Assets de la ventana Proyecto. Este objeto ScriptableObject contiene una colección de configuraciones que puedes usar para importar el modelo, lo que te permite conservar sus configuraciones y modificaciones.
Cuando selecciones el ScriptableObject y se abra su ventana Inspector, verás el campo Modo de importación en la parte superior, que se puede configurar como Prefab o Escena :
- Prefab: Para objetos individuales
- Escena : Para activos muy grandes y detallados, como un edificio de gran altura con miles o incluso millones de objetos.
El Inspector también proporciona tres pestañas: Modelo, motor de reglas y niveles de detalle (LOD):
- Modelo : Desde aquí, puede configurar los parámetros de importación del modelo. En esta etapa, el modelo fuente original se convierte en un recurso 3D optimizado.
- Motor de reglas : Defina un conjunto de reglas que le permita automatizar la preparación de datos de su modelo directamente desde la etapa de ingesta. Los conjuntos de reglas son especialmente útiles cuando necesitas reimportar tu modelo de origen a medida que evoluciona. Consulte la siguiente sección para obtener una introducción al motor de reglas y a los conjuntos de reglas.
- LODs : Agregue reglas LOD para generar LODs; estas se pueden generar directamente durante el proceso de importación del modelo, como paso final.
Una vez que hayas configurado los ajustes, haz clic en Importar y el prefab del modelo se añadirá a la carpeta Assets > 3DModels en la vista Proyecto. Puedes arrastrar y soltar el modelo en la vista de escena, lo que también lo añade a la jerarquía.
Mirar: Instala el Unity Asset Transformer Toolkit.

Optimizar los recursos 3D
El kit de herramientas Asset Transformer proporciona herramientas para limpiar los modelos importados, preparándolos para un entorno en tiempo real, al tiempo que se mantiene la fidelidad visual y los metadatos necesarios. Esto se puede hacer automáticamente durante el proceso de importación utilizando los conjuntos de reglas mencionados anteriormente, o manualmente después de la importación como acciones individuales utilizando las herramientas de la barra de herramientas de Asset Transformer.
Limpiar la jerarquía
En la plantilla, si sigues los pasos para importar un nuevo recurso de robot, verás que su estructura en la jerarquía es demasiado compleja. Haz clic en uno de los elementos básicos, como el GameObject llamado body_body_main_01-1 , y verás en su Inspector que todos los metadatos asociados a esa parte se añaden en un componente. Sin embargo, su objeto hijo contiene el filtro de malla, que muestra la geometría real, así como la información del material que se le ha asignado actualmente.

Un objeto de juego hijo del objeto body_body_main_01-1 con un componente de filtro de malla añadido.
Es más eficiente tener todos esos detalles en un solo objeto junto con los metadatos y no separados.
Para solucionar esto, utilice la herramienta Combinar . Por defecto, la herramienta Combinar está configurada para Combinar todo . No conviene aplicar esto, ya que fusionará todo en un único prefab. Quieres mantener el nivel final de todos los objetos. Si selecciona la opción Nivel final en el menú desplegable, le indicará a la herramienta de fusión que recorra la lista en la jerarquía y encuentre el último objeto en cada árbol, y luego lo fusione con el que está justo encima.

La herramienta de fusión en el kit de herramientas Asset Transformer
Vea los pasos adicionales en este video .
Ejecución
Puedes eliminar la geometría innecesaria de un modelo para hacerlo más ligero. La opción Estadísticas en el kit de herramientas Asset Transformer muestra estadísticas para un modelo seleccionado, o parte de un modelo. El modelo CAD que importarás en este tutorial de plantilla tiene 510 GameObjects y más de 600.000 triángulos antes de la optimización, lo que lo convierte en un modelo realmente denso. Mira este vídeo para ver cómo se eliminan los agujeros del nuevo modelo de robot.
Inspeccione la densidad del modelo activando el menú Depuración y cambiando la vista a Relación de vértices . Esto se muestra en rojo donde hay objetos que son extremadamente densos en relación con todo lo demás en la escena. Este es un buen indicador de dónde se puede utilizar la decimación para optimizar un modelo.

Diezmando a gran escala
La decimación puede ser un proceso tedioso si el modelo tiene mucha geometría, como en este caso. Así que también tienes la opción de diezmar a gran escala.
Al configurar la opción Criterio en la herramienta de decimación en Calidad y seleccionar el nivel superior del modelo CAD en la Jerarquía, puede seleccionar un nivel de calidad objetivo y luego ejecutar la herramienta para aplicar la decimación a todo.
Al aplicar esta acción al robot con la calidad configurada en baja, se produjo una reducción del 65 % en los triángulos, quedando su número en poco menos de 200.000, lo que lo optimiza para ejecutarse en dispositivos móviles.
Ajustar las normales
Un problema que suele surgir con optimizaciones tan intensas como esta es que pueden romper la suavidad de un modelo. Su aspecto y presentación bajo la luz pueden cambiar después de la decimación, donde de repente se aprecian artefactos o quizás esquinas más duras que antes. Eso se puede solucionar ajustando las normales de tu modelo. El kit de herramientas Asset Transformer Toolkit proporciona una serie de herramientas que permiten ajustar o restablecer las normales del modelo.
Mirar: Optimizar el modelo CAD

Utilice conjuntos de reglas para ahorrar tiempo al reimportar activos.
Los modelos CAD suelen pasar por numerosas iteraciones durante el proceso de diseño, y puede resultar ineficiente tener que ejecutar todas las acciones anteriores cada vez que se vuelve a importar un modelo después de realizar cambios en la aplicación CAD.
Dependiendo de la etapa del proceso de diseño en la que te encuentres y de la cantidad de iteraciones de diseño que tengas, puede convertirse en un proceso tedioso.
Ahí es donde los conjuntos de reglas ofrecen una gran ventaja. Los conjuntos de reglas, que se configuran en el motor de reglas del Asset Transformer Toolkit, son una secuencia de instrucciones, llamadas acciones , que Unity sigue durante la importación o que se pueden aplicar manualmente, y que automatizan muchas de las acciones que normalmente se desean aplicar a un modelo CAD.
Crear un conjunto de reglas
Un conjunto de reglas es esencialmente una receta que indica al kit de herramientas Asset Transformer que encuentre el objeto o los objetos específicos según los criterios dados y que, a continuación, aplique la acción que usted especifique. Por ejemplo, cuando vea este nombre de material en el archivo CAD, asígnelo a este material de Unity . Cuando encuentres piezas con nombres que sigan este patrón, agrúpalas. Cuando el número de polígonos supere este umbral, genere niveles LOD . Estas reglas permiten automatizar lo que de otro modo sería un trabajo manual tedioso.
La plantilla Fundamentos de la industria incluye varios conjuntos de reglas predefinidos en la carpeta Conjuntos de reglas. Merecen la pena estudiarlas, no solo por lo que hacen, sino también por cómo pueden ayudarte a reflexionar sobre la importancia de priorizar las optimizaciones. En la plantilla, un conjunto de reglas gestiona el modelo del robot, que necesita un alto nivel de detalle en las articulaciones de los brazos, donde los usuarios centrarán su atención, pero puede permitirse un menor nivel de detalle en la base, donde es menos visible. Otro se encarga del entorno del almacén, donde la geometría es más simple pero hay mucha, por lo que la generación agresiva de LOD tiene sentido.
Existe un conjunto de reglas que aplicará las acciones de diezmado y limpieza de jerarquía como un proceso automatizado durante la importación. La plantilla también proporciona otro conjunto de reglas que incorporará automáticamente la oclusión ambiental a los datos de los vértices para aumentar la fidelidad visual del modelo. Por último, existen conjuntos de reglas que le mostrarán cómo puede intercambiar materiales y objetos durante el proceso de importación.
Para crear un conjunto de reglas:
1. En la carpeta del proyecto, haga clic con el botón derecho y seleccione Crear > Transformador de activos > Conjunto de reglas .
2. Establezca el nombre para su conjunto de reglas.
3. Edite el conjunto de reglas desde la pestaña dedicada (se abre automáticamente junto al Inspector).
4. Agregue elementos a la secuencia, por ejemplo, filtros, acciones y reglas adicionales. Las reglas se aplican de forma secuencial, de arriba abajo.
Si observas la imagen de abajo, a la derecha, verás que hay un conjunto de reglas abierto. La primera acción está configurada por defecto en Obtener . Esto añadirá un objeto a la escena y todo lo que ocurra después se aplicará a ese objeto seleccionado.

Un conjunto de reglas (a la derecha) para uno de los modelos de robot.
La acción Obtener seleccionará todo el modelo del robot, y cualquier acción posterior se aplicará a todo el modelo del robot, por lo que necesita una forma de encontrar los elementos específicos dentro del mismo a los que desea aplicar las acciones posteriores. Para ello, añada una acción de filtro a esta regla y configure la acción en Filtrar por metadatos para utilizar los metadatos importados con el modelo CAD.
Reimportar activos de manera eficiente
Los conjuntos de reglas como los anteriores se pueden ejecutar manualmente mediante:
- Seleccionar el objeto o los objetos a los que desea aplicar
- Seleccione el conjunto de reglas y luego haga clic en el botón Ejecutar.
Sin embargo, también puede configurarlo para que los conjuntos de reglas se apliquen automáticamente como parte del proceso de importación. Para configurarlo, seleccione el objeto ScriptableObject de configuración de importación que se creó en la carpeta Assets > 3DModel , y verá en su Inspector que el botón Importar ahora se llama Re-importar .
Seleccione el botón Motor de reglas y, a continuación, especifique el conjunto de reglas que desea ejecutar durante el proceso de importación.
Si selecciona el botón "Reimportar" después de configurar esto, cada vez que se vuelva a importar el modelo CAD, se le aplicará la regla especificada. También puedes anidar varias reglas y conjuntos de reglas dentro de la regla de importación para asegurarte de que todas se apliquen durante el proceso de importación.
Mirar: Conjuntos de reglas

Mirar: Conjuntos de reglas avanzadas

Agregar un nuevo robot a la plantilla
Una vez que hayas analizado cómo importar, optimizar y automatizar todo ese proceso, es hora de convertir estos datos CAD en un robot funcional basado en datos dentro de una simulación.
La plantilla proporciona todos los componentes necesarios para seguir el proceso, incluidos scripts en C# para vincular el modelo con la interfaz de usuario y configurarlo para que se pueda alternar entre las diferentes variantes del robot y probar su comportamiento en tiempo real.
Analicemos uno de los flujos de trabajo explicados en la plantilla.
En la escena del almacén hay varios robots, y quieres configurar cualquier modelo de robot nuevo para que tenga la misma funcionalidad que los demás. Para ello, tendrás que volver a importar el modelo, un proceso eficiente y predecible ahora que tienes conjuntos de reglas establecidos. Estos son los pasos:
1. En Proyecto > Modelos 3D , encontrará el recurso ScriptableObject importado que contiene todas las configuraciones establecidas previamente. Abra el Inspector y compruebe en la pestaña Motor de reglas que tiene configuradas las reglas de importación.

La pestaña Motor de reglas (derecha) con los conjuntos de reglas configurados previamente para este modelo.
2. En la pestaña Modelo , compruebe que esté seleccionada la opción Importar metadatos . Esto es fundamental para que los filtros y todos los conjuntos de reglas funcionen correctamente.
3. Tras reimportar el modelo, lo encontrará en Activos > Modelos 3D , y desde allí podrá arrastrarlo y soltarlo en la vista de escena.
4. En la jerarquía, observarás que los robots existentes en la escena están anidados bajo un objeto de juego principal llamado Robots GameObject. Expanda esto, seleccione uno de los objetos robot secundarios y verá que tiene un script de robot adjunto con un objeto scriptable de datos de robot , que contiene toda la información para cada robot.

El objeto ScriptableObject SO de datos del robot, que contiene toda la información para cada robot.
5. Si miras en la carpeta Assets > Warehouse > RobotData , verás que los cuatro robots que están actualmente en la escena tienen cada uno su propio objeto ScriptableObject RobotDataSO individual. Deberás adjuntar el mismo ScriptableObject al nuevo robot.
6. Para ello, haga clic con el botón derecho en la carpeta Activos y seleccione Crear > Plantilla de industria > Datos de robot . Asígnale un nombre que corresponda con el número de modelo del robot.
7. Haz clic en el nuevo robot que has añadido para abrir su Inspector, luego haz clic en Añadir componente , busca el script del robot en el menú desplegable, llamado Robot.cs , y añádelo.
8. Arrastra el nuevo objeto ScriptableObject del robot al campo Datos del nuevo script, y se añadirán automáticamente todos los demás scripts y componentes que necesitas para que este robot se comporte como los demás.
Sigue los tutoriales de la plantilla para ver cada paso para tomar tus datos CAD, incorporarlos a una aplicación en tiempo real para crear un gemelo digital y configurar los controles para supervisar los robots a través de la interfaz de usuario.
Mirar: Interfaz de usuario e interactividad

Crea un panel de control de monitorización con UI Toolkit.
Unity tiene dos sistemas para crear interfaces de usuario (UI): Unity UI (uGUI) y kit de herramientas de UI. Industry Fundamentals utiliza UI Toolkit.
UI Toolkit está diseñado para ofrecer un rendimiento óptimo y una gran adaptabilidad en diferentes plataformas, y se inspira en las tecnologías web estándar. Si tienes experiencia desarrollando páginas web o aplicaciones, los conceptos básicos de UI Toolkit te resultarán familiares. UI Toolkit proporciona herramientas y flujos de trabajo potentes que aprovechan tus conocimientos previos de lenguajes de marcado y hojas de estilo.
Kit de herramientas de interfaz de usuario: Inspirado en tecnologías web estándar
Con UI Toolkit, puedes separar la estructura, el estilo y el comportamiento de tu interfaz de usuario, de forma similar a como lo harías con HTML, CSS y JavaScript.
UXML es un lenguaje de marcado inspirado en HTML y XML que define la estructura de la interfaz de usuario y plantillas reutilizables. Si bien es posible crear interfaces de usuario en C#, el uso de UXML ofrece la posibilidad de trabajar en diseños de interfaz de usuario dentro de la ventana del Generador de interfaz de usuario de Unity, lo que proporciona una experiencia de creación visual.
Las USS son hojas de estilo que aplican estilos visuales y reglas de diseño a la interfaz de usuario. Al igual que CSS, USS admite un subconjunto de propiedades CSS estándar. Si bien es posible definir estilos en C#, se recomienda usar USS porque garantiza que los estilos se puedan reutilizar en toda la interfaz de usuario, creando una apariencia unificada y simplificando su gestión.

Creación de la interfaz de usuario del panel de control en UI Builder
UI Toolkit admite un sistema de enlace de datos que permite vincular las propiedades de los elementos de la interfaz de usuario con las fuentes de datos. Esto significa que cuando los datos cambian, la interfaz de usuario se actualiza automáticamente, y viceversa.
En esta sección, analizaremos el diseño del panel de control y cómo funciona con la vinculación de datos.
Cableado del panel de control en Fundamentos de la industria

La interfaz de usuario del panel de control muestra una lista de robots a la izquierda y los detalles y controles a la derecha.
El panel de control tiene secciones diferenciadas: información general en la parte superior, una lista de robots a la izquierda y detalles y controles a la derecha. El archivo USS del panel de control define un sistema de diseño completo, como variables de color y espaciado, y clases para elementos repetidos como botones e indicadores de estado.
Cada robot tiene tres estados de estado: estándar, advertencia o crítico, que necesitan una representación visual. El USS define tres clases: estado estándar, estado de advertencia y estado crítico, cada una con un color de fondo distinto. El script de AC# agrega y elimina estas clases en función del estado del robot. La salud del robot se deteriora con el tiempo cuando la batería cae por debajo de un umbral crítico; cuanto menor sea el nivel de la batería, más rápido se deteriorará. Si el estado del robot o el nivel de batería caen en niveles de advertencia o críticos, las clases de estado se actualizan en consecuencia, lo que proporciona a los operadores una señal visual instantánea en el panel de control.

Cada robot tiene tres estados de estado: estándar, advertencia o crítico, que necesitan una representación visual.
En un proyecto real, esta separación significa que los diseñadores pueden ajustar el color de la advertencia sin tocar el código, y los programadores pueden agregar nuevos tipos de estado sin comprender CSS.
Script de UIController
El script UIController lo conecta todo. Almacena en caché referencias a elementos de la interfaz de usuario al iniciarse, registra funciones de devolución de llamada de eventos para botones y controles deslizantes, se suscribe a los eventos del Administrador de robots y actualiza la interfaz de usuario cuando cambia el estado. La plantilla muestra ambos enfoques para las actualizaciones de la interfaz de usuario: la vinculación de datos para valores continuos como el nivel de batería y el código explícito para eventos discretos como la selección del robot.
Enlace de datos

Enlace de datos en UI Toolkit
En lugar de escribir código que actualice manualmente cada etiqueta y barra de progreso, se declaran enlaces en UXML que conectan las propiedades de los elementos de la interfaz de usuario con las propiedades del origen de datos. Cuando los datos cambian, la interfaz de usuario se actualiza automáticamente.
La plantilla vincula los elementos de la interfaz de usuario directamente al objeto ScriptableObject RobotDataSO de cada robot. Esto proporciona información sobre su nivel de batería, estado, temperatura y velocidad. El UXML declara enlaces como "el texto de esta etiqueta debe ser la propiedad Battery de esta fuente de datos, formateada como un porcentaje".
Esta vinculación es bidireccional; por ejemplo, el control deslizante del rango del brazo no solo muestra un valor, sino que también lo establece. Cuando el usuario arrastra el control deslizante, la propiedad vinculada se actualiza, lo que provoca el movimiento del brazo del robot. La interfaz de usuario se convierte en una superficie de control, no solo en una pantalla.
Los convertidores son una parte esencial de la vinculación de datos, ya que gestionan la brecha entre los tipos de datos y los formatos de visualización. La batería es un float entre 0 y 100 en la fuente de datos, pero usted quiere que se muestre "75%" y no "75.0". La plantilla incluye recursos de conversión que registran funciones de formato. En tus enlaces, haces referencia a estos convertidores, y estos transforman los valores en el proceso de conversión de datos a visualización.
El minimapa

El minimapa en el panel de control; el fondo del minimapa es una textura renderizada de una cámara aérea.
El minimapa muestra la representación personalizada dentro de UI Toolkit. El fondo del minimapa es una textura de renderizado de una cámara aérea. Los puntos que representan la posición del robot son elementos de la interfaz de usuario posicionados en función de las coordenadas del mundo transformadas al espacio de la interfaz de usuario. En cada fotograma, el código lee la posición global de cada robot, calcula a qué parte del minimapa corresponde y actualiza la posición del punto; una técnica sencilla pero eficaz para mostrar las relaciones espaciales.
Mirar: Análisis en profundidad de la interfaz de usuario

Configurar la navegación automática y manual.

La malla de navegación prehorneada en el almacén
¿Cómo saben los robots hacia dónde pueden moverse? El almacén está lleno de obstáculos (estanterías, palés, otros robots) y cada robot necesita encontrar la manera de sortearlos. Esta es la función del sistema de navegación por IA de Unity.
Si abres la escena del almacén en el Editor, vas a la barra de herramientas superior y haces clic en el botón Alternar visibilidad , la NavMesh aparecerá en la escena como una superposición azul. Un NavMesh es una malla que genera Unity para aproximar las áreas transitables y los obstáculos en un entorno para la búsqueda de rutas y la navegación controlada por IA.
La opción con mejor rendimiento es integrar la malla de navegación (NavMesh) en la escena en lugar de crearla en tiempo de ejecución. Durante el proceso de horneado, el sistema de navegación examina la escena y, en función de los parámetros que hayas configurado, encuentra todas las áreas por donde pueden moverse los agentes (en este caso, los robots).

El sistema de navegación con IA de Unity gestiona la lógica de movimiento para el control autónomo y manual.
En la plantilla, cada robot conoce su ruta porque tiene un componente NavMesh Agent adjunto. También cuenta con algunos ajustes predefinidos que se pueden modificar, por ejemplo, la velocidad, los parámetros de aceleración, el radio de evasión y la altura.

El componente Agente de Nav Mesh
Si bien gran parte de la lógica de movimiento está gestionada por el sistema NavMesh, en Assets > Warehouse > Scripts también hay un script RandomAgentMovement que se encarga de establecer los destinos de destino. La escena tiene destinos específicos predefinidos. En tiempo de ejecución, este script asignará uno de esos destinos a un robot y, a continuación, comprobará constantemente a qué distancia se encuentra ese robot de dicho destino. Si el robot llega a ese destino, se detiene allí durante unos segundos. A continuación, el script asigna un nuevo destino; gracias a NavMesh, el robot determina automáticamente la ruta óptima hacia su destino y emprende el camino correspondiente.

Script de movimiento de agente aleatorio
Puede surgir un problema en una aplicación donde se pueden controlar manualmente varios objetos junto con agentes autónomos como los robots. Los robots deben ser conscientes de los objetos en movimiento, como una puerta que se abre y se cierra o una caja que se mueve. Para que los robots sean conscientes de estos movimientos, debe estar integrado en la configuración de NavMesh.
Para gestionar esto en Industry Fundamentals, se añade un componente NavMeshObstacle al sistema NavMesh. Esto le indica al sistema NavMesh que delimite un área específica alrededor del robot. A medida que el robot se mueve, el área se mueve con él, lo que impide que los robots atraviesen elementos como estanterías o choquen con otros robots.
Si cambia al modo manual para controlar los robots, el componente NavMeshObstacle se asigna y activa, mientras que el componente NavMeshAgent se desactiva.

Robots de almacén moviéndose sobre la NavMesh

El cambio entre modos se produce a través del objeto ScriptableObject de datos del robot. La propiedad OperationMode puede ser Automática o Manual, y varios componentes comprueban este valor para decidir qué hacer. La interfaz de usuario cuenta con botones para alternar el modo, que actualizan el recurso de datos, lo que provoca que los componentes reaccionen. Este enfoque basado en datos significa que agregar nuevos modos o cambiar el comportamiento de los modos no requiere modificar varios scripts.
Mirar: Tutorial de NavMesh

Un sistema de cámara virtual con Cinemachine
La plantilla Industry Fundamentals utiliza el sistema de cámara virtual Cinemachine (que puede descargar como un paquete) de tres maneras:
- Para crear la cámara que sigue al robot activo y para proporcionar una transición fluida entre los diferentes robots a medida que seleccionas diferentes tarjetas.
- Para mantener la cámara enfocada en el robot mientras se mueve por el almacén y asegurarse de que no atraviese diferentes objetos.
- Para enviar la vista 3D directamente a la interfaz de usuario del panel de control.
El concepto fundamental es sencillo: En tu escena tienes un objeto GameObject de cámara de Unity , gestionado por un componente Brain de Cinemachine , y varias cámaras virtuales que definen las tomas potenciales. El componente Cerebro alterna entre las cámaras virtuales en función de sus prioridades. Únicamente la cámara virtual habilitada con la máxima prioridad controla lo que ves.
Las cámaras en los fundamentos de la industria
Si abres la escena del almacén, verás algunos robots dispersos, que te proporcionarán elementos con los que trabajar antes de añadir tu propio robot. Deberás asegurarte de que, al añadir tu propio robot a la escena, también tenga asignada una cámara virtual.
En la jerarquía, localiza el objeto de juego Cinemachine Shots que proporciona una toma predeterminada.

Cámaras virtuales Cinemachine en el almacén
Al pulsar Reproducir, cada robot tendrá su propia cámara de seguimiento, añadida mediante un script en tiempo de ejecución. Ese script obtiene una lista de cuántos robots hay en la escena, incluidos los nuevos que se agreguen, y para cada uno de ellos, crea un componente Cinemachine Camera, así como un componente Third-Person Follow . El componente de seguimiento en tercera persona permite crear una cámara que se sitúa detrás del objeto en movimiento y que, a continuación, seguirá al objeto que se haya asignado como objetivo de seguimiento.

El objeto de juego RobotFollowCam con componentes de Cinemachine adjuntos, incluyendo:
Para la interfaz de usuario del panel de control, Cinemachine se implementa de dos maneras diferentes: Una cámara 3D para mostrar la cámara que se está renderizando actualmente, y otra para el minimapa. El minimapa utiliza una textura de renderizado con una cámara independiente que renderiza la vista desde arriba y luego envía esa vista a la textura de renderizado. La cámara 3D no utiliza una textura, sino que renderiza la vista desde la cámara real de la aplicación en ejecución, aunque a través de un recorte rectangular en la interfaz de usuario.
Cinemachine te permite crear sistemas de cámara flexibles donde el cerebro de Cinemachine se encarga de toda la lógica para alternar entre las diferentes cámaras, creando cámaras virtuales que actúan como marcadores de posición para la cámara principal real. Por último, proporciona componentes adicionales como la cámara de seguimiento en tercera persona, que se encarga de gran parte del trabajo pesado que normalmente conlleva la creación de una aplicación en tiempo real.
Mirar: Tutorial de Cinemachine

Optimiza la iluminación con el Universal Render Pipeline.
El Universal Render Pipeline (URP) es la solución de Unity para la renderización escalable. Está diseñado para producir imágenes de alta calidad y, al mismo tiempo, funcionar de manera eficiente en todo tipo de dispositivos, desde ordenadores de sobremesa de gama alta hasta dispositivos móviles y navegadores web. Para aplicaciones industriales, esta flexibilidad es crucial. Es posible que necesite la misma aplicación para que funcione como pantalla de quiosco en una feria comercial, como aplicación web para clientes remotos y como aplicación para tabletas para técnicos de campo.
La configuración URP de la plantilla se encuentra en la carpeta Settings. El componente Render Pipeline Asset controla la configuración global de renderizado. Comprender la función de estos ajustes te ayudará a realizar ajustes inteligentes para tus propios proyectos.

Uno de los robots de la escena del almacén en la plantilla Fundamentos de la industria
Renderizado hacia adelante+
La plantilla utiliza el renderizado Forward+ , que gestiona múltiples luces de forma eficiente a la vez que mantiene la compatibilidad con una amplia gama de hardware. Forward+ funciona agrupando las luces en el espacio de la pantalla, por lo que añadir más luces a la escena no afecta negativamente al rendimiento como ocurriría con el renderizado directo tradicional.
El suavizado de bordes elimina los bordes dentados que aparecen donde la geometría se encuentra con el fondo. La plantilla utiliza MSAA a 4x para el nivel de alta calidad, 2x para el nivel medio y ninguno para el nivel bajo. MSAA es rápido en las GPU modernas, pero consume más memoria, por lo que el enfoque por niveles permite escalar en función del dispositivo de destino.
Utiliza cascadas de sombras
Las sombras mejoran la calidad visual, pero pueden resultar computacionalmente costosas. La plantilla utiliza cascadas de sombras, que proporcionan sombras de alta resolución cerca de la cámara y sombras de menor resolución en la distancia.
Una combinación de luces horneadas y sondas de luz
La iluminación en la plantilla utiliza un enfoque híbrido. Las estructuras geométricas estáticas, como el suelo, las paredes y las estanterías del almacén, utilizan iluminación integrada. Los objetos dinámicos, como los robots, utilizan luces y sondas de luz en tiempo real.
Las sondas de luz son puntos invisibles en la escena que toman muestras de la iluminación precalculada. Cuando un objeto dinámico se mueve cerca de una sonda de luz, capta la iluminación ambiental de ese lugar. La plantilla incorpora sondas de luz distribuidas por todo el almacén para que los robots se sientan integrados en el entorno en lugar de estar simplemente encima de él.
El sistema LightRig añade otra capa. Cada robot dispone de un conjunto de focos que se activan al seleccionarlo. Esto permite centrar la atención visual en el robot en funcionamiento sin necesidad de una iluminación global costosa. La implementación consiste simplemente en un componente que activa y desactiva las luces en función del estado de selección.

Cada robot dispone de un conjunto de focos que se activan al seleccionarlo.
La iluminación ambiental proviene de una imagen HDRI que proporciona la sutil luz ambiental que rellena las sombras y da a las superficies metálicas algo que reflejar. La plantilla incluye varias opciones HDRI para que puedas ver cómo los diferentes entornos de iluminación afectan al ambiente de la escena.
Scripts de C#
Analicemos los scripts y los ScriptableObjects que se utilizan en la plantilla.
Como se ha descrito en secciones anteriores, todos los detalles de un robot, como sus movimientos, cómo se avería y cómo informa a la interfaz de usuario, están contenidos en un ScriptableObject. Si accedes a la vista Proyecto y luego a Activos > Almacén > Datos de robot , encontrarás el ScriptableObject de cada robot. Abre el Inspector de uno de estos robots y encontrarás sus detalles, como su nombre, modo de funcionamiento actual, estado actual, variante activa, batería, estado de salud, temperatura de funcionamiento, velocidad, etc. El ScriptableObject no hace nada por sí solo; en este contexto, es simplemente un contenedor que almacena todos los datos específicos de ese modelo en particular.
También existe un objeto programable que contiene datos de toda la flota de robots, incluidos los niveles promedio de batería de todos ellos, cuántos están en movimiento y cuántos se encuentran en cada categoría de estado. Todo esto se comunica a la interfaz de usuario del panel de control.
Los scripts se utilizan para vincular todos estos datos con los robots propiamente dichos y dotarlos de funcionalidad, por ejemplo, movimiento o cambio entre las diferentes variantes. En la plantilla los encontrarás en la carpeta de scripts de Warehouse. Existen scripts para controlar los robots y para vincular todos los ScriptableObjects con un modelo real. Selecciona uno de estos y verás que hay scripts de Robot, Simulador y Variante.
RobotManager
El script RobotManager da vida a todos los datos al iniciar el sistema. Este script es un singleton, por lo que solo hay una instancia de este en toda la escena. Cuando se inicie la aplicación, detectará todos los robots presentes en la escena y los almacenará en una lista. Este guion contiene dos eventos cruciales: ActiveRobotChanged , que se activa cada vez que un usuario selecciona un robot diferente, y RobotListChanged , que se activa cuando se agrega o se elimina un robot de la lista.
Este script es la columna vertebral de la comunicación de todo el proyecto. A medida que revises otros guiones, verás que muchos de ellos están suscritos a estos eventos.

El script RobotManager
El script OverallDataUpdater se ejecuta en cada fotograma e indica al objeto scriptable OverallData que recorra los datos de cada robot, sume los números y actualice el resumen de la flota. Así pues, aunque los datos generales contienen toda la información, este es el script que realmente hace que funcione.

El script OverallDataUpdater
Cada robot utiliza el sistema NavMesh para comprender dónde puede y no puede moverse. Pero también necesitan algo hacia lo que avanzar, y como se explicó anteriormente, cada robot puede funcionar en modo automático o manual. Para gestionar todo esto, la plantilla incluye un script de RobotEditor, al que se accede a través de Activos > Almacén > Scripts > Editor. Este script añade automáticamente todo lo necesario a un prefab de robot cuando se le asigna un ScriptableObject.
El script RandomAgentMovement está activo cuando los robots están en modo automático. Este script tiene una serie de objetivos. Cuando se inicia el script, elige uno al azar y envía al agente hacia él. En cada fotograma, comprueba si el agente ha llegado. Analiza la distancia restante, si se sigue calculando la trayectoria y si el agente ha dejado de moverse. Una vez que se cumplen las tres condiciones, espera un tiempo aleatorio (de uno a tres segundos), luego elige un nuevo objetivo y el robot comienza de nuevo todo el proceso.
Como verás en la simulación, los robots deambulan por el almacén y, en cada destino, se detienen un momento como si estuvieran haciendo algo allí, luego giran y se dirigen al siguiente objetivo.
Y, como recordarás, al cambiar al modo manual, el script Robotscript desactiva el componente NavMesh Agent y activa el componente NavMesh Obstacle con la función de tallado habilitada. Un robot con ese componente activado se desplazará sobre la NavMesh y abrirá una abertura en la NavMesh a su alrededor. Cuando otro robot en modo automático se acerque, no podrá atravesarlo ya que hay una abertura en la malla de navegación; encontrará una nueva ruta para rodearlo. Cuando vuelvas a activar el modo automático, se eliminará el componente Nav Mesh Obstacle y se volverá a habilitar NavMeshAgent.
El script RobotDataSimulator simula lo que sucedería en un entorno real, como el agotamiento de las baterías a medida que los robots se mueven, averías, etc. Este script también escribe actualizaciones en el ScriptableObject, que a su vez informa al panel de la interfaz de usuario sobre qué mostrar.
Finalmente, para cada modelo, el script Variant es donde se pueden especificar las diferentes variantes y su comportamiento. Al seleccionar el botón que permite alternar entre las variantes, este script activará o desactivará las correspondientes.
Mirar: Arquitectura de C# y ScriptableObjects

Optimizaciones de rendimiento
Las aplicaciones industriales a menudo necesitan funcionar correctamente en múltiples dispositivos de hardware, lo que implica pensar detenidamente en cómo optimizar la experiencia. Estas son algunas de las estrategias utilizadas en la plantilla.
- Gestión de la frecuencia de actualización : No es necesario que todo suceda en cada fotograma. El simulador de telemetría se actualiza en cada fotograma porque los usuarios esperan una respuesta instantánea al conducir manualmente. Las estadísticas agregadas se actualizan una vez por segundo porque los promedios de toda la flota no cambian significativamente más rápido que eso. La plantilla permite configurar esto, de modo que puedas ajustar el equilibrio entre la capacidad de respuesta y el uso de la CPU.
- Almacenamiento en caché de consultas de la interfaz de usuario : El método Q de UI Toolkit encuentra elementos por nombre o clase, lo cual es práctico pero tiene sus inconvenientes. Llamar a Q en cada fotograma para encontrar el mismo elemento desperdicia ciclos. La plantilla realiza una consulta al iniciarse, almacena las referencias en campos y utiliza esas referencias almacenadas en caché posteriormente.
- Optimización de consultas de NavMesh : La búsqueda de rutas completa, donde se calcula el camino completo desde A hasta B, es costosa, pero validar un solo punto es más barato. El controlador manual utiliza NavMesh.SamplePosition en lugar de CalculatePath porque solo necesita saber si el siguiente paso es válido, no la ruta completa.
- LODs : El modelo del robot tiene varios niveles de detalle, que se seleccionan automáticamente en función del tamaño de la pantalla. De cerca, se pueden apreciar todos los detalles, mientras que un robot más alejado tiene una geometría simplificada que, aun así, se lee correctamente. Los umbrales de LOD) de la plantilla están optimizados para el entorno del almacén; deberá ajustarlos en función de las distancias de visualización típicas de su escena.
- Resolución de textura de renderizado : Esto equilibra la calidad con la memoria de la GPU y la tasa de llenado. La cámara de seguridad y el minimapa no necesitan resolución completa, por lo que se renderizan en texturas más pequeñas. Esto reduce la cantidad de píxeles que la GPU necesita rellenar y la memoria que consumen esas texturas.
- Filtrado de la capa física : La plantilla coloca los robots en una capa llamada "Bot" y configura los ajustes físicos para que solo colisionen las capas relevantes. Los robots chocan con el suelo y entre sí, pero no con los objetivos de trazado de rayos de la interfaz de usuario ni con otros sistemas que utilizan colisionadores para fines no físicos.
- Niveles de calidad : La plantilla define tres niveles con ajustes progresivamente reducidos. En tiempo de ejecución, se detectaría la capacidad del dispositivo o se proporcionarían los ajustes del usuario, y luego se llamaría a QualitySettings.SetQualityLevel para cambiar. El recurso URP Render Pipeline admite anulaciones por nivel, de modo que puedes reducir la resolución de las sombras en dispositivos de gama baja sin afectar a los de gama alta.
Por último, las herramientas de análisis de rendimiento de Unity son esenciales para encontrar cuellos de botella. Analiza el hardware objetivo, identifica los puntos críticos y optimiza específicamente esos puntos en lugar de optimizarlo todo prematuramente.
El ecosistema de Unity Industry
Unity Industry incluye los productos y el soporte necesarios para crear, gestionar y escalar aplicaciones multiplataforma. Diseñado para creadores de la industria, abarca todas las etapas, desde la integración de datos hasta la implementación.
Únase a las principales empresas de fabricación, automoción, comercio minorista y otros sectores que utilizan tecnología 3D en tiempo real para obtener una ventaja competitiva, acelerar el lanzamiento de productos al mercado y optimizar los recursos. Desde la visualización de productos hasta las simulaciones, Unity Industry impulsa experiencias inmersivas.
Obtén la plantilla de Fundamentos de la Industria
Si eres suscriptor de Unity Industry :
1. Abre Unity Hub y actualiza a Unity 6.4.
2. Crea un nuevo proyecto y luego busca Fundamentos de la industria , o ve a la categoría Aprendizaje y selecciona la plantilla que encuentres allí.
Si no tienes una suscripción a Unity Industry :
1. Visita nuestra página de prueba gratuita y sigue las instrucciones para obtener una prueba gratuita.
2. Una vez que su período de prueba esté activo, siga los mismos pasos que para los suscriptores del plan Industry.
Obtén el libro electrónico
Rellena este formulario para acceder a información y soluciones de vanguardia de expertos del sector.



