caching - Unity 3D: paquetes de activos frente a la carpeta de recursos vs www.Texture
resources unity3d (2)
Por lo tanto, he leído un poco sobre los foros sobre AssetBundles y la carpeta de Recursos en Unity 3D, y no puedo encontrar la solución óptima para el problema que estoy enfrentando. Aquí está el problema:
Tengo un programa diseñado para ser independiente, que carga "libros" llenos de imágenes .png y .jpg. Las páginas son, por el momento, las mismas cada vez que se inicia el programa. Al comienzo de la escena para cualquier "libro", está cargando todas esas imágenes a la vez usando www.texture y un camino. Ahora me estoy dando cuenta, sin embargo, de que este es posiblemente un método no efectivo para acceder a cosas en tiempo de ejecución, ¡es lento! Lo que significa que el usuario no puede hacer nada durante 5-20 segundos mientras se inicia la escena y las imágenes de la página del libro se cargan (en computadoras no legendarias). Entonces, no puedo descifrar cuál de las tres cosas sería la más rápida:
1) Cargando un paquete de activos por libro (digamos 20 texturas a 1 mb cada uno).
2) Cargando un paquete de activos por página (1 mb cada uno).
3) Cualquiera de las dos primeras opciones, pero cargadas desde la carpeta de recursos.
¿Cuál sería más rápido y por qué? Entiendo que los paquetes de activos están empaquetados por unidad, pero ¿esto significa que las texturas en el interior serán precomprimidas y más fáciles de recordar en el momento de la carga? ¿La carpeta de recursos causa menos tiempo de carga? ¿Lo que da? Tal como lo entiendo, la carpeta de recursos se carga en un caché, pero ¿es el mismo caché que utiliza normalmente el reproductor independiente? ¿O es este espacio extra no utilizado? Supongo que otro problema es que no estoy seguro de cuál es la diferencia entre cargar cosas de la memoria y almacenarlas en la memoria caché.
Saludos, amigos ...
Las carpetas de recursos son activos gestionados agrupados. Eso significa que serán comprimidos por Unity, siguiendo las configuraciones que aplique en el IDE. Por lo tanto, son eficientes para cargar en tiempo de ejecución. Puede adaptar la compresión para cada plataforma, lo que debería optimizar aún más el rendimiento.
Hacemos un uso costoso de Resources.Load () para extraer recursos y tiene un buen rendimiento tanto en computadoras de escritorio como en dispositivos móviles.
También hay una carpeta especial, llamada StreamingAssets, que puede usar para agrupar activos no administrados. Aquí es donde ponemos los videos que queremos reproducir en tiempo de ejecución, pero no queremos que Unity los convierta al códec ogg predeterminado. En el móvil, estos se reproducen en el reproductor de video nativo. También puede poner imágenes allí y cargarlas es como usar la clase WWW. Lento, porque Unity necesita desinfectar y comprimir las imágenes en el momento de la carga.
La carga de WWW es más lenta debido a la sobrecarga del activo de procesamiento, como se mencionó anteriormente. Pero puede extraer datos de un servidor o desde fuera de la aplicación "sandbox".
- Cargue solo lo que necesita para mostrar e implementar un proceso en segundo plano para buscar contenido adicional cuando el usuario está ocupado revisando las primeras páginas de cada libro. Esto evitaría bloquear la IU por mucho tiempo.
- Optimizar las imágenes para reducir el tamaño del archivo. Use tinypng, si necesita imágenes transparentes, o adhiérase a JPG comprimidos
- Intente usar el poder de 2 imágenes cuando sea posible. Esto debería acelerar un poco el procesamiento del tiempo de ejecución.
ath.
Gran respuesta de Jerome sobre los recursos. Para agregar alguna información adicional para futuras búsquedas relacionadas con AssetBundles, aquí hay dos escenarios:
Tu juego es muy grande
Tienes un montón de texturas, por ejemplo, y tu juego para iOS tiene más de 100 mb, lo que significa que Apple mostrará una advertencia a los usuarios e impedirá que se descarguen por celular. Los recursos no ayudarán porque todo en esa carpeta se incluye con la aplicación.
Solución: Mueva la ilustración que no necesita absolutamente al ejecutar por primera vez paquetes de activos. Construya los paquetes, cárguelos en un servidor en algún lugar, luego descárguelos en tiempo de ejecución según sea necesario. Ahora tu juego es mucho más pequeño y no tendrá ninguna advertencia de miedo.
Necesita diferentes versiones de ilustraciones para diferentes plataformas
Escenario alternativo: estás desarrollando para iPhone y iPad. Por las mismas razones que las anteriores, reduce su obra de arte lo más posible para alcanzar el límite de 100 mb para iPhone. Pero ahora el juego se ve terrible en el iPad. ¿Qué hacer?
Solución: crea un paquete de activos con dos variantes. Una para teléfonos con ilustraciones de baja resolución y otra para tabletas con ilustraciones de alta resolución. En este caso, los paquetes de activos pueden enviarse con el juego o enviarse a un servidor. En el tiempo de ejecución, elige la variante correcta y la carga desde el paquete de activos, obteniendo la obra de arte adecuada sin tener que if / else en todas partes.
Con todo lo que se dice, los paquetes de activos son más complicados de usar, están mal documentados y las demostraciones de Unity no funcionan a veces. Entonces evalúa seriamente si los necesitas.