
Este es el primero de una serie de artículos que desglosan consejos de optimización para tus proyectos de Unity. Úsalos como guía para funcionar a tasas de fotogramas más altas con menos recursos. Una vez que hayas probado estas mejores prácticas, asegúrate de revisar las otras páginas de la serie:
Consulta nuestras últimas guías de optimización para desarrolladores y artistas de Unity 6:
Un pipeline de activos bien optimizado puede acelerar los tiempos de carga, reducir el uso de memoria y mejorar el rendimiento en tiempo de ejecución. Al trabajar con un artista técnico experimentado, tu equipo puede definir y hacer cumplir formatos de activos, especificaciones y configuraciones de importación para garantizar un flujo de trabajo eficiente y optimizado.
No te bases únicamente en la configuración predeterminada. Aprovecha la pestaña de anulación específica de la plataforma para optimizar activos como texturas, geometría de malla y archivos de audio. Configuraciones incorrectas pueden resultar en tamaños de compilación más grandes, tiempos de compilación más largos y un mal uso de la memoria.
Considera usar Preajustes para establecer configuraciones base adaptadas a las necesidades específicas de tu proyecto. Este enfoque proactivo ayuda a garantizar que los activos estén optimizados desde el principio, lo que lleva a un mejor rendimiento y una experiencia más consistente en todas las plataformas.
Para más orientación, consulta las mejores prácticas para activos artísticos o explora el curso Optimización de Arte 3D para Aplicaciones Móviles en Unity Learn. Estos recursos proporcionan información valiosa que puede ayudarte a tomar decisiones informadas sobre la optimización de activos para compilaciones web de Unity, móviles y aplicaciones XR.

En la configuración de Jugador, desactiva API Gráfica Automática para plataformas no compatibles para evitar generar variantes de sombreadores excesivas. Desactiva Arquitecturas de Destino para CPUs más antiguas si tu aplicación no las soporta.
En la configuración de Calidad, desactiva niveles de calidad innecesarios.
Aprende más sobre la API Gráfica.

Cambiar el backend de scripting de Mono a IL2CPP (Lenguaje Intermedio a C++) puede proporcionar un mejor rendimiento general en tiempo de ejecución. Sin embargo, también puede aumentar los tiempos de construcción. Algunos desarrolladores prefieren usar Mono localmente para una iteración más rápida, y luego cambiar a IL2CPP para máquinas de construcción y/o candidatos de lanzamiento. Consulta la documentación sobre la optimización de los tiempos de construcción de IL2CPP para más información sobre cómo reducir tus tiempos de construcción.
Nota: Al usar esta opción, Unity convierte el código IL de scripts y ensamblados a C++ antes de crear un archivo binario nativo (.exe, .apk, .xap) para tu plataforma de destino.
Consulta la Introducción a los internos de IL2CPP o consulta la página del manual de opciones del compilador para aprender cómo las diversas opciones del compilador afectan el rendimiento en tiempo de ejecución.
Los proyectos móviles deben equilibrar las tasas de fotogramas con la duración de la batería y la reducción de rendimiento térmico. En lugar de llevar al límite tu dispositivo a 60 fps, considera ejecutar a 30 fps como un compromiso. Unity predetermina a 30 fps para móviles.
Al dirigirse a plataformas XR, las consideraciones de la tasa de fotogramas son aún más críticas. Una tasa de fotogramas de 72 fps, 90 fps o incluso 120 fps, a menudo es necesaria para mantener la inmersión y prevenir el mareo por movimiento. Estas tasas de fotogramas más altas ayudan a garantizar una experiencia fluida y receptiva, lo cual es crucial para la comodidad en entornos de VR. Sin embargo, estos vienen con sus propios desafíos en términos de consumo de energía y gestión térmica, particularmente en auriculares de VR autónomos.
Elegir la tasa de fotogramas adecuada se trata de entender las demandas y limitaciones específicas de tu plataforma objetivo, ya sea un dispositivo móvil, un visor de VR independiente o un dispositivo de AR. Al seleccionar cuidadosamente una tasa de fotogramas apropiada, puedes optimizar tanto el rendimiento como la experiencia del usuario en diferentes plataformas.
También puedes ajustar la tasa de fotogramas dinámicamente durante el tiempo de ejecución con Application.targetFrameRate. Por ejemplo, podrías bajar de 30 fps para escenas lentas o relativamente estáticas y reservar configuraciones de fps más altas para el juego.
Más información está disponible en la documentación.
Unity agrupa el acelerómetro de tu móvil varias veces por segundo. Desactiva esto si no se está utilizando en tu aplicación, o reduce su frecuencia para un mejor rendimiento general.
Aprende más sobre el acelerómetro.

Divide tus jerarquías. Si tus GameObjects no necesitan estar anidados en una jerarquía, simplifica la paternidad.
Las jerarquías más pequeñas se benefician del multihilo para actualizar los Transforms en tu escena. Las jerarquías complejas incurren en cálculos de Transform innecesarios y más costos para la recolección de basura.
Consulta Optimización de la jerarquía y esta charla de Unite para obtener consejos sobre Transforms.
Considera estos dos ejemplos anteriores utilizando el mismo modelo y textura. Los ajustes a la izquierda consumen casi 26 veces la memoria que los de la derecha, sin mucha mejora en la calidad visual.
Utiliza Compresión de Textura Escalable Adaptativa (ATSC) para móvil, XR y la web. La gran mayoría de los juegos en desarrollo tienden a dirigirse a dispositivos de especificaciones mínimas que soportan la compresión ATSC.
Las únicas excepciones son:
Si los formatos comprimidos como PVRTC y ETC no son de calidad suficientemente alta, y si ASTC no es totalmente compatible con tu plataforma objetivo, intenta usar texturas de 16 bits en lugar de texturas de 32 bits.
Consulta el manual para más información sobre el formato de compresión de textura recomendado por plataforma.

Las texturas pueden potencialmente usar recursos excesivos, por lo que optimizar tus Configuraciones de Importación es crítico. En general, intenta seguir estas pautas:
Aprende más sobre Configuraciones de Importación de Textura.
El atlas es el proceso de agrupar varias texturas más pequeñas en una sola textura más grande. Los Texture Atlases reducen el uso de memoria y requieren menos llamadas de dibujo, disminuyendo así el esfuerzo requerido por la GPU.
Combina texturas y remapea UVs para cualquier geometría 3D que no requiera mapas de alta resolución. Un editor visual te da la capacidad de establecer y priorizar los tamaños y posiciones en el Texture Atlas o Sprite Sheet.
El Texture Packer consolida los mapas individuales en una gran textura. Unity puede emitir entonces una sola llamada de dibujo para acceder a las texturas empaquetadas con un menor costo de rendimiento.
Lee más sobre Sprite Atlases aquí.

Modelos de mayor resolución significan más uso de memoria y potencialmente tiempos más largos en la GPU. ¿Necesita tu geometría de fondo medio millón de polígonos? Considera reducir modelos en tu paquete DCC de elección. Elimina polígonos no visibles desde el punto de vista de la cámara, y usa texturas y mapas normales para detalles finos en lugar de mallas de alta densidad.

Al igual que las texturas, las mallas pueden consumir una cantidad significativa de memoria, así que elige configuraciones de importación óptimas para ellas. Reduce la huella de memoria de las mallas con las siguientes prácticas:
Desactivar normales y tangentes: Si estás absolutamente seguro de que el material de la malla no necesitará normales o tangentes, desmarca estas opciones para obtener ahorros adicionales.

Opciones adicionales de optimización de mallas están disponibles en la Configuración del Jugador:
Al automatizar el proceso de auditoría, puedes evitar cambiar accidentalmente la configuración de los activos. El Postprocesador de activos puede ayudarte a estandarizar tus configuraciones de importación o analizar activos existentes. Te permite ejecutar scripts al importar activos y, esencialmente, te solicita personalizar configuraciones antes y/o después de importar modelos, texturas, audio y más.
Lee más sobre Auditoría de activos en la Guía de comprensión de optimización.
Unity utiliza un búfer circular para enviar texturas a la GPU. Puedes ajustar manualmente este búfer de texturas asíncronas a través de QualitySettings.asyncUploadBufferSize.
Si la tasa de carga es demasiado lenta o el hilo principal se detiene mientras carga varias texturas a la vez, ajusta estos búferes de texturas. Por lo general, puedes establecer el valor (en MB) al tamaño de la textura más grande que necesitas cargar en la escena.
Ten en cuenta que cambiar los valores predeterminados puede llevar a una alta presión de memoria. Además, no puedes devolver la memoria del búfer circular al sistema después de que Unity la haya asignado. Si la memoria de la GPU se sobrecarga, la GPU descarga la textura más reciente y menos utilizada, y obliga a la CPU a volver a cargarla la próxima vez que entre en el frustum de la cámara.
Explora todas las restricciones de memoria para los búferes de texturas en el tutorial de gestión de memoria, y consulta Optimización del rendimiento de carga para ver cómo puedes mejorar los tiempos de carga.
El sistema Streaming de Mip Map te da control sobre qué niveles de Mip Map deben cargarse en memoria. Actívalo yendo a la configuración de Calidad de Unity (Editar > Configuración del proyecto > Calidad) y marca la opción Streaming de texturas. Puedes habilitar Streaming de Mip Maps en la Configuración de importación de texturas bajo Avanzado.
Este sistema reduce la cantidad total de memoria necesaria para las texturas porque solo carga los Mip Maps necesarios para renderizar la posición actual de la cámara. De lo contrario, Unity carga todas las texturas por defecto.
El Streaming de texturas intercambia una pequeña cantidad de recursos de CPU para ahorrar una cantidad potencialmente grande de memoria de GPU. También reduce automáticamente los niveles de Mip Map para mantenerse dentro del Presupuesto de Memoria definido por el usuario.
Puedes usar la API de Streaming de Mip Map para un mayor control.

El Sistema de Activos Direccionables proporciona una forma simplificada de gestionar tu contenido. Este sistema unificado carga AssetBundles por "dirección" o alias, de forma asíncrona desde una ruta local o una red de entrega de contenido (CDN) remota.
Si divides tus activos no relacionados con el código (modelos, texturas, Prefabs, audio e incluso escenas completas) en un AssetBundle, puedes separarlos como contenido descargable (DLC).
Luego, usa Addressables para crear una construcción inicial más pequeña para tu aplicación móvil. Cloud Content Delivery te permite alojar y entregar el contenido de tu juego a los jugadores a medida que avanzan en el juego.
Consulta el tutorial Comenzar con Addressables en Unity Learn para una visión rápida de cómo puede funcionar el Sistema de Activos Direccionables en tu proyecto.
Y haz clic aquí para ver cómo el Sistema de Activos Direccionables puede eliminar las complicaciones de la gestión de activos.


Encuentra más prácticas recomendadas y consejos para desarrolladores y creadores avanzados de Unity en el centro de prácticas recomendadas de Unity. Elige entre más de 30 guías, creadas por expertos de la industria, ingenieros de Unity y artistas técnicos, que te ayudarán a desarrollar de manera eficiente con las herramientas y sistemas de Unity.