Hola a todos, mi nombre es Florin, y hoy hablaré sobre cómo mejorar el rendimiento de tus juegos de WebGL Unity. Un poco sobre mí. Soy ingeniero de producto en Crazy Games, también soy desarrollador de juegos. Puedes ver un par de los juegos que he creado aquí. Principalmente trabajo con Unity, pero también tengo algunos juegos simples en vanilla JS.
En Crazy Games somos una de las plataformas de juegos más grandes, tenemos más de 5000 juegos, trabajamos con más de 700 desarrolladores y también tenemos 20 millones de jugadores únicos. Así que sí, comencemos con los problemas web de Unity que puedes encontrar al construir para la web. Está el tamaño del paquete, que afecta la rapidez con la que se carga tu juego, el uso de memoria, la RAM que básicamente usa tu juego cuando se ejecuta, y el rendimiento en tiempo de ejecución. ¿Y por qué es importante mantener bajo el uso de memoria en tiempo de ejecución? Bueno, en el navegador, Unity utiliza un heap de memoria para almacenar los datos del juego. Y digamos que cargas una nueva escena, se necesitan cargar nuevas texturas, el navegador puede tener que aumentar el tamaño del heap. Y si un navegador no puede asignar más memoria para aumentar el tamaño del heap, obtendrás este feo popup que simplemente bloquea tu juego.
Sobre el rendimiento del código, no hablaré de eso aquí, así que Oz ya dio una excelente presentación sobre ello, se llama Detect and Avoid Common Performance and Memory Issues in Unity WebGL y animo a todos a que la vean. Sobre Brotli y jZip, estos dos son dos formatos de compresión diferentes para la compilación en Unity. En primer lugar, nunca lanzan compilaciones sin comprimir porque ocupan alrededor de 11MB, el jZip, el predeterminado, ocupa un poco más de espacio que el Brotli, por lo que generalmente recomendamos a los desarrolladores que elijan el Brotli, porque puedes ver la diferencia, puede ser bastante pequeña en un proyecto vacío, pero cuando tu juego se hace más grande, esta diferencia solo se hará más grande. Así que sí, generalmente quédate con el Brotli, aunque toma un poco más de tiempo para comprimir, pero vale la pena.
Sobre el soporte de excepciones, cuando construyes un juego para la web, puedes elegir el soporte sin excepciones esto es más eficiente, pero ya no puedes usar try-catch en tu código. Si sabes que tienes que usar try-catch en algún lugar, elige solo las excepciones lanzadas explícitamente que creo que también es el predeterminado. Y generalmente, deberías evitar las completas, excepto si estás depurando el juego, porque afectará negativamente el tamaño del paquete y el rendimiento de tu juego. También me gustaría hablar sobre el formato de compresión de texturas, que puedes elegir. Dext es el predeterminado y este es mejor para los navegadores de escritorio. También está ASTC que es mejor para navegadores móviles y algunos Chromebooks. Y si eliges el formato de compresión adecuado, las texturas no tienen que ser descomprimidas en memoria y el juego usará menos memoria en tiempo de ejecución. Puedes ver aquí en este pequeño snapshot de memoria, tenemos una compilación con seis texturas, todas bastante grandes, y si se descomprimen en memoria, ocuparán alrededor de 75 megabytes. Si permanecen comprimidas, ocupan alrededor de 10 megabytes. Así que básicamente lograste ahorrar alrededor de 65 megabytes de memoria en tiempo de ejecución, eso es bastante en un dispositivo móvil. Intentamos experimentar esto también con un par de nuestros juegos. Lamentablemente, solo obtuvimos algunas mejoras insignificantes en la tasa de carga y el tiempo de carga. Y cómo lo hicimos, tenemos dos compilaciones separadas, y cargamos la DXT en todas las plataformas o cargamos inteligentemente esta para probar en la plataforma necesaria. Y como dijimos, no obtuvimos mejoras considerables, pero aún así, si tienes, por ejemplo, un juego que lanzas solo para dispositivos móviles, considera usar este, por ejemplo. O puedes consultar la documentación de Unity sobre cómo cargar dos compilaciones separadas, como hicimos con este experimento.
Comments