AssetBundles PF (Preguntas Frecuentes)
Social API (API Social)

Reducir el tamaño del archivo de su compilación

Keeping the file size of the built app to a minimum is important, especially for mobile devices or for app stores that impose a size limit. The first step in reducing the size is to determine which Assets contribute most to it, because these Assets are the most likely candidates for optimization. This information is available in the Editor Log just after you have performed the build. Go to the Console window (menu: Window > Console), click the small drop-down panel in the top right, and select Open Editor Log.

El Editor Log justo después de una construccción
El Editor Log justo después de una construccción

El registro del editor proporciona un resumen de los assets desglosados por tipo, y luego enumera todos los assets individuales en orden de contribución de tamaño. Normalmente, elementos como Texturas, Sonidos y Animaciones ocupan el mayor espacio de almacenamiento, mientras que los Scripts, Niveles y Shaders suelen tener el menor impacto. Los Encabezados del archivo mencionados en la lista no son assets: en realidad son los datos adicionales que se agregan a los archivos assets “en bruto” para almacenar referencias y configuraciones. Los encabezados normalmente hacen muy poca diferencia en el tamaño del Asset, pero el valor puede ser grande si tiene numerosos Assets grandes en la carpeta de Resources (Recursos).

El Registro del Editor lo ayuda a identificar los Assets que puede desear eliminar u optimizar, pero debe considerar lo siguiente antes de comenzar:

  • Unity vuelve a codificar los Assets importados en sus propios formatos internos, por lo que la elección del tipo de Asset fuente no es relevante. Por ejemplo, si tiene una textura de Photoshop multicapa en el proyecto, se aplana y se comprime antes de construir. Exportar la textura como un archivo .png no hace ninguna diferencia en el tamaño de la construcción, por lo que debe seguir el formato que le resulte más conveniente durante el desarrollo.

  • Unity elimina la mayoría de los assets no utilizados durante la compilación, por lo que no obtiene nada al eliminar manualmente los assets del proyecto. Los únicos assets que no se eliminan son los scripts (que en general son muy pequeños) y los assets en la carpeta de recursos (porque Unity no puede determinar cuáles de ellos son necesarios y cuáles no). Con esto en mente, debe asegurarse de que los únicos assets en la carpeta de recursos sean los que necesita para el juego. Es posible que pueda reemplazar los Assets en la carpeta de Recursos con AssetBundles, esto significa que Unity carga los Assets dinámicamente, reduciendo así el tamaño del reproductor.

Sugerencias para reducir el tamaño de construcción

Texturas

Las texturas suelen ocupar el mayor espacio en la construcción. La primera solución para esto es usar formatos comprimidos de Textura. Consulte la documentación sobre Compresión de textura específica de la plataforma para obtener más información.

Si eso no reduce el tamaño del archivo lo suficiente, intente reducir el tamaño físico (en píxeles) de las imágenes de Textura. Para hacerlo sin modificar el contenido original de la fuente, seleccione la textura en la vista del proyecto, y en la ventana del inspector reduzca el Max Size. Para ver cómo se ve en el juego, acerca un GameObject que usa la textura, luego ajusta el Max Size hasta que comience a verse peor en la vista de escena. Cambiar el tamaño máximo de la textura no afecta tu valor de textura, solo su resolución en el juego.

Cambiar el tamaño máximo de la textura no afecta tu valor de textura, solo su resolución en el juego
Cambiar el tamaño máximo de la textura no afecta tu valor de textura, solo su resolución en el juego

By default, Unity compresses all Textures when importing. For faster workflow in the Editor, go to Unity > Preferences and untick the checkbox for Compress Assets on Import. All Textures are compressed in the build, regardless of this setting.

Meshes y Animaciones

Puede comprimir Meshes y clips de animación importados para que ocupen menos espacio en su archivo de juego. Para habilitar la compresión de Mesh, seleccione Mesh, luego, en la ventana del Inspector configure Mesh Compression a Low, Medium o High. La compresión Mesh y animación utiliza la cuantificación, lo que significa que requiere menos espacio, pero la compresión puede introducir algunas imprecisiones. Experimenta con qué nivel de compresión es aceptable para tus modelos.

Tenga en cuenta que la compresión mesh solo produce archivos de datos más pequeños y no utiliza menos memoria en tiempo de ejecución. La reducción de Animaton keyframe produce archivos de datos más pequeños y utiliza menos memoria en tiempo de ejecución; en general, siempre debe tenerlo habilitado. Consulte la documentación de Animation Clips para obtener más información al respecto.

DLLs

Por defecto, Unity incluye solamente los siguientes DLLs en el reproductor construido:

  • mscorlib.dll

  • Boo.Lang.dll

  • UnityScript.Lang.dll

  • UnityEngine.dll

Al crear un reproductor, debe evitar las dependencias de System.dll o System.Xml.dll. Unity no incluye estos en el reproductor integrado por defecto, pero si usa sus clases, están incluidos. Estas DLL agregan alrededor de un megabyte al tamaño de almacenamiento del jugador. Si necesita analizar XML en su juego, puede usar una librería como Mono.Xml.zip como una una alternativa más pequeña a las librerías del sistema. Si bien la mayoría de los contenedores genéricos están contenidos en mscorlib, Stack y algunos otros están en System.dll, por lo que debe evitarlos si es posible.

Unity incluye System.Xml.dll y System.dll al construir un reproductor
Unity incluye System.Xml.dll y System.dll al construir un reproductor

Reducción del tamaño de la librería .NET móvil

Unity admite dos niveles de compatibilidad API .NET para algunos dispositivos móviles: .NET 2.0 y un subconjunto de .NET 2.0. Seleccione el nivel apropiado para su compilación en Player Settings

El perfil de la API .NET 2.0 es similar a la API completa de .NET 2.0. La mayoría de las rutinas de la libreria están completamente implementadas, por lo que esta opción ofrece la mejor compatibilidad con el código .NET preexistente. Sin embargo, para muchos juegos, la librería completa no es necesaria y el código superfluo ocupa un espacio de memoria valioso.

Para evitar la pérdida de memoria, Unity también es compatible con el perfil .NET 2.0 Subset API. Esto es muy similar al perfil Mono “monotouch”, por lo que muchas limitaciones del perfil “monotouch” también se aplican al perfil .NET 2.0 Subset de Unity. Consulte la documentación de Mono Project sobre Limitaciones de MonoTouch para obtener más información. Muchas rutinas de librería que no son comúnmente necesarias en los juegos se dejan fuera de este perfil para ahorrar memoria. Sin embargo, esto también significa que el código con dependencias en esas rutinas no funciona correctamente. Esta opción puede ser una optimización útil, pero debe verificar que el código existente aún funcione después de que se aplique.

AssetBundles PF (Preguntas Frecuentes)
Social API (API Social)