Obtenga el GUID del recurso que se generará

1) Obtener el GUID del recurso que se va a generar
2) La cuestión de fusionar varios paquetes de recursos pequeños en un paquete de recursos grande
3) La función y el motivo histórico del parámetro hasExtraRoot en el modelo Meta
4) Puntos de atención en el procesamiento por lotes


Esta es la publicación número 333 del intercambio de conocimientos técnicos de la UWA, y también es la tercera ronda de "Acumulación|Intercambio de tecnología". Selecciona temas candentes en la comunidad de la UWA, cubre preguntas y respuestas de la UWA, publicaciones de la comunidad y otros puntos de conocimiento técnico, para ayudar a todos. comprender y estudiar más ampliamente.

Activo

P: Suponga que necesita importar un archivo FBX y modificar algunas configuraciones de importación al mismo tiempo. Si importa primero, genera un GUID y luego lo modifica, el proceso de importación aparecerá dos veces. Cuando la cantidad de recursos es grande, se perderá mucho tiempo.

La configuración en sí es simple y Meta se puede crear a través del texto. Pero el GUID de recursos es un problema más problemático. Porque hay que garantizar que no se repita, y tiene cierta relación con el camino.

Si el GUID se genera utilizando la ruta de recursos de importación futura, ¿qué se debe hacer?

R1: Tengo un requisito similar recientemente. Mi método es preparar una plantilla Meta para "configuración de importación", y el GUID que contiene ya existe en el proyecto. Luego, al generar o modificar los recursos correspondientes, copie directamente esa plantilla Meta. Luego, si el recurso que se va a importar ya se ha importado, vuelva a colocar el GUID. Si se trata de un recurso recién importado, Unity generará automáticamente un nuevo GUID para mí. No me importa, por lo que la importación será mucho más rápida.

Gracias a la comunidad de preguntas y respuestas de junbin.liu@UWA por proporcionar respuestas

R2: Se recomienda modificar directamente al importar, puede probar OnPostprocessAllAssets of Unity 3D.

Gracias a la comunidad de preguntas y respuestas He Fan@UWA por proporcionar respuestas


paquete de activos

P: Leí un artículo que dice que la interfaz LoadFromFile(string path, uint crc, ulong offset); se puede usar para combinar paquetes de recursos en un solo paquete y reducir las operaciones de E/S. No sé si el proceso se entiende de la siguiente manera:

Antes de la fusión:
Paquete de activos A: assets_res_a.bundle
Paquete de recursos B: assets_res_b.bundle
Cómo cargar paquetes de recursos antes de la fusión:
AssetBundle a = AssetBundle.LoadFromFile("assets_res_a.bundle");
AssetBundle b = AssetBundle.LoadFromFile("assets_res_b. bundle ");

Después de la fusión:
paquete de recursos AB: assets_res_ab.bundle
y registra las compensaciones de a y b en el paquete grande (ab) (compensación = 0 para el paquete A, compensación = 12 para el paquete B). El método de carga del paquete de recursos después de la fusión
:
AssetBundle a = AssetBundle.LoadFromFile("assets_res_ab.bundle", 0, 0);
AssetBundle b = AssetBundle.LoadFromFile("assets_res_ab.bundle", 0, 12);

Desde el punto de vista de la interfaz, las operaciones de IO no se reducen después de la fusión, y assets_res_ab.bundle todavía se lee dos veces, a menos que el motor esté optimizado internamente.Cuando se lee assets_res_ab.bundle por primera vez, hay IO, y el segundo no esta liberado no es IO despues de leerlo por primera vez por favor denme un consejo.

R: AssetBundle ya es un VFS, y no es razonable administrar una capa adicional encima, y ​​puede haber conflictos de manejo de E/S.

La llamada reducción de IO anterior no es para reducir el volumen de lectura de IO en sí, sino para reducir un identificador de IO y escribir directamente dos recursos originales en un paquete, que en realidad es lo mismo. Entonces la pregunta es cómo empaquetar el paquete de manera razonable.

Gracias a la comunidad de preguntas y respuestas 1 9 7 3-3111356 @UWA por proporcionar respuestas


Activo

P: ¿Para qué sirve el parámetro hasExtraRoot en el modelo Meta? ¿Hay alguna razón histórica?

Hay un parámetro extraño hasExtraRoot en el modelo Meta, que parece pertenecer a humanDescription, pero en realidad afectará a cualquier tipo de modelo.

No hay lugar para ajustar este parámetro ya sea en la API o en la interfaz del editor. Algunos de los elementos actuales son 0 y algunos son 1. Se puede observar que en el caso de 1 se conservará el Transform sin asociación de Mesh en la capa exterior, en el caso de 0 se eliminará el Transform con el Top Child no superior a 1 y sin Mesh.

No se como se genero esto, es para adaptarlo a algunas versiones historicas?

R: Puede consultar lo siguiente:
Importación de FBX: la plataforma humanoide crea un GameObject adicional ("hasExtraRoot") - Foro de Unity

Gracias a Wild Watermelon @UWA Q&A Community por la respuesta


Representación

Puntos de atención en el procesamiento por lotes de SRP

SPR Batcher es adecuado para tuberías URP, siempre que las variantes de Shader utilizadas en el material sean las mismas, se pueden agrupar por lotes. Sin embargo, DrawCall de UGUI y partículas usa la lógica de lotes propia de Unity, por lo que SRP Batcher no es aplicable; y el uso de MaterialPropertyBlock para modificar materiales, incluido SpriteRenderer, interrumpirá SRP Batcher.

Además, debe prestar atención al RenderQueue intercalado. La prioridad de instancias de GPU es más alta que la de SRP Batcher. El problema más invisible es que el procesamiento por lotes de SRP Batcher es exitoso en el Editor, pero el procesamiento por lotes falla en la máquina real. . Por ejemplo, la versión de Unity conduce a la falla de OpenGL ES. La API causa el problema de que SRPBatcher no se procesa por lotes en la máquina real. Por ejemplo, si las variables en CBuffer no están en la propiedad del sombreador, no habrá problemas similares.

Esperando más discusiones, bienvenido a la comunidad UWA para la comunicación:
UWA-Community

¿Cuáles son los puntos a tener en cuenta sobre el procesamiento por lotes estático?

Hay dos tipos de procesamiento por lotes estático, uno se procesa en el Editor por adelantado y el otro es el procesamiento dinámico en Runtime, que requiere que se dosifique el mismo material.

Por supuesto, también hay desventajas: cuando se repite el submodelo, puede aumentar el uso de la memoria Mesh. Por eso todo el mundo dice que el procesamiento por lotes estático consume más espacio.

Esperando más discusiones, bienvenido a la comunidad UWA para la comunicación:
UWA-Community

La imagen de portada proviene de Internet.


Eso es todo por el intercambio de hoy. La vida tiene un límite pero el conocimiento no tiene límite. En el largo ciclo de desarrollo, los problemas que encontramos son solo la punta del iceberg. La comunidad UWA está dispuesta a acompañarte a explorar y compartir juntos. Más desarrolladores son bienvenidos a unirse a la comunidad UWA.

Sitio web oficial de la UWA: www.uwa4d.com
Comunidad de la UWA: community.uwa4d.com

 

Supongo que te gusta

Origin blog.csdn.net/UWA4D/article/details/130336875
Recomendado
Clasificación