Unity hablará sobre SpriteAtlas

Felicitaciones al Sr. Panda, después de medio año de estar en libertad, finalmente comenzó a trabajar nuevamente. (Susurrando Bibi, es muy difícil encontrar trabajo este año. Habilidad ambigua, tropezando con paredes en todas partes)

SpriteAtlas es un contenido nuevo introducido por unity2017. De hecho, es un atlas. La mayor ventaja es que al representar imágenes en el mismo atlas, solo se generará un DrawCall. (probablemente probablemente tal vez así)

Permítanme hablar sobre algunas cosas acerca de esto hoy. Buscar artículos de otras personas es realmente demasiado difícil, no puedo encontrar todo tipo de...

Basado en la API de unity2018, hablemos de algunos.

En primer lugar, está el tema del almacenamiento .

Atlas y la Textura o Sprite a importar no deben colocarse en el directorio de Recursos. Porque los archivos en el directorio de Recursos no se ingresarán en el atlas.

Luego, está el tema de la carga .

En breve:

SpriteAtlas sa = AssetDatabase.LoadAssetAtPath<SpriteAtlas>(path);

SpriteAtlas es una clase en UnityEngine.U2D.

En la descripción oficial, el método proporcionado es crear un script que herede Mono y luego agregar SpriteAtlas a su List<SpriteAtlass>. Pero en este caso, no sería muy problemático. Cada vez que crea uno nuevo, debe montarlo o escribir una adición automática.

La adición automática suena genial, pero principalmente no quiero hacer un script como este. [cabeza de perro]

Debe resolverse con código. Piénselo, atlas no se puede colocar en Recursos, por lo que definitivamente no es el método Resources.Load(). Por lo tanto, debe usar AssetDatabase, una clase estática que puede administrar los archivos de todo el proyecto.

Finalmente, permítanme hablar sobre los atributos de la plataforma.

inserte la descripción de la imagen aquí
El Unity de algunas personas no tiene los siguientes dos íconos pequeños, que son los paquetes de soporte de desarrollo para IOS y Android. Se puede descargar en Configuración de compilación.
inserte la descripción de la imagen aquí
Tomando Android como ejemplo, el valor predeterminado es así. Anular para Android significa que cuando se lanza el paquete de Android, varios parámetros utilizan los datos seleccionados aquí.
inserte la descripción de la imagen aquí
Sin embargo, ayer recibí una tarea, porque cada vez que creo un nuevo atlas, este no está seleccionado por defecto, por lo que tengo que cambiarlo manualmente, lo cual es muy problemático. De hecho, el problema es insuperable. Lo más importante es que es fácil de olvidar. Si lo olvida, no podrá lograr la apariencia ideal cuando entregue el paquete. Es necesario volver a (jia) salir (prohibir).

Entonces, necesito verificar automáticamente la anulación cuando alguien crea un nuevo atlas y cambiar el formato a RGBA ASTC 4x4.

En breve:

public class AssetsPostManager : AssetPostprocessor {
    
    
    static void OnPostprocessAllAssets(string[] importedAsset, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) {
    
    

        if (0 < importedAsset.Length)
        {
    
    
            foreach (string filePath in importedAsset)
            {
    
    
                //判断是否是文件 跳过文件夹
                if (filePath.Contains("."))
                {
    
    
                    //通过后缀名做判断文件类型
                    string suffix = filePath.Substring(filePath.LastIndexOf('.') + 1);

                    switch (suffix)
                    {
    
    
                        case "spriteatlas":
                            OnPostprocessSpriteAtlas(filePath);
                            break;
                        default:
                            break;
                    }
                }
            }
        }
    }

    //SpriteAtlas
    private static void OnPostprocessSpriteAtlas(string path)
    {
    
    
        SpriteAtlas sa = AssetDatabase.LoadAssetAtPath<SpriteAtlas>(path);
        SpriteAtlasExtensions.SetPlatformSettings(sa, new TextureImporterPlatformSettings
        {
    
    
            name = "Android",
            overridden = true,
            format = TextureImporterFormat.ASTC_RGBA_4x4,
        });
    }

}

A continuación, permítanme hablar sobre este código y el hoyo que encontré en ese momento.

Postprocesador de activos

AssetPostprocessor le permite conectarse a la canalización de importación y ejecutar secuencias de comandos antes o después de importar activos.Le
permite conectarse a la canalización de importación y ejecutar secuencias de comandos antes o después de importar activos.

También puedes echar un vistazo a este artículo, es muy intuitivo.
https://blog.csdn.net/qq826364410/article/details/86515209

Suena como una buena clase de herramienta de edición. (Siento que se ha abierto el camino al hombre herramienta)

public static void OnPostprocessAllAssets(string[] importedAsset, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)

Todas las importaciones, eliminaciones y movimientos de recursos llamarán a este método. Tenga en cuenta que este método es estático. Puede ver sus parámetros, activos importados, activos eliminados, activos movidos y la ruta de los activos antes de moverlos.

Así que solo pasé diez minutos e hice un poco de clasificación. Extraiga el SpriteAtlas y modifíquelo en un método.

En cuanto a OnPostprocessSpriteAtlas, no es nativo, y espero que las personas que lo vean no se dejen engañar.

A continuación, está la parte que me llevó varias horas modificar sus parámetros.

Primero, tomó más de 20 minutos encontrar una clase estática que pueda modificar parámetros, SpriteAtlasExtensions, en UnityEditor.

F12 entre y eche un vistazo, hay tres métodos principales.

        // 摘要:
        //     Set the SpriteAtlasPackingSettings to use when packing this SpriteAtlas
        public static void SetPackingSettings(this SpriteAtlas spriteAtlas, SpriteAtlasPackingSettings src);
        // 摘要:
        //     Set the platform specific settings.
        public static void SetPlatformSettings(this SpriteAtlas spriteAtlas, TextureImporterPlatformSettings src);
        // 摘要:
        //     Set the SpriteAtlasTextureSettings for the packed texture generated by this SpriteAtlas.
        public static void SetTextureSettings(this SpriteAtlas spriteAtlas, SpriteAtlasTextureSettings src);

Mira el panel:
inserte la descripción de la imagen aquí
la parte roja, Embalaje. Entonces, todos sus parámetros se procesan en SetPackingSettings.

La parte azul, Textura. Entonces, todos sus parámetros se procesan en SetTextureSettings.

El de abajo es sobre la configuración de cada plataforma. Por lo tanto, todos sus parámetros se procesan en SetPlatformSettings.

En este momento, fui a mirar la API y descubrí que la plataforma no estaba configurada. ? ?

Tuve que ir al sitio web de Unity Api para echar un vistazo. Como se mencionó anteriormente, TextureImporterPlatformSettings es una variante de TextureImporter.

Bueno, echaré un vistazo a TextureImporter. No está mal, encontré varios métodos útiles.

        [Obsolete("Use UnityEditor.TextureImporter.SetPlatformTextureSettings(TextureImporterPlatformSettings) instead.")]
        public void SetPlatformTextureSettings(string platform, int maxTextureSize, TextureImporterFormat textureFormat);
        // 摘要:
        //     Set specific target platform settings.
        public void SetPlatformTextureSettings(TextureImporterPlatformSettings platformSettings);
        // 摘要:
        //     Set specific target platform settings.
        [Obsolete("Use UnityEditor.TextureImporter.SetPlatformTextureSettings(TextureImporterPlatformSettings) instead.")]
        public void SetPlatformTextureSettings(string platform, int maxTextureSize, TextureImporterFormat textureFormat, int compressionQuality, bool allowsAlphaSplit);
        // 摘要:
        //     Set specific target platform settings.
        [Obsolete("Use UnityEditor.TextureImporter.SetPlatformTextureSettings(TextureImporterPlatformSettings) instead.")]
        public void SetPlatformTextureSettings(string platform, int maxTextureSize, TextureImporterFormat textureFormat, [DefaultValue(false)] bool allowsAlphaSplit);
        

plataforma de cadena, puede configurar la plataforma. De repente, obsoleto? ? ?

Qué diablos, ha sido obsoleto. sentirse perdido.

Comenzó a navegar y agregó para ver la API. Después de una hora, me rendí.

Tengo que esperar a que el programa principal tenga tiempo para ver qué hacer.

En este momento, solo puedo volver al lugar donde comenzó el sueño y luego ver la clase TextureImporterPlatformSettings.

Otro repentino, vi un campo de nombre. ¿Para qué es esto?

Al principio, pensé que habría muchos conjuntos de configuraciones, por lo que sería útil como nota. ¿Crees que es necesario ahora?

Abra el resumen y eche un vistazo:

// 摘要:
        //     Name of the build target.
        public string name {
    
     get; set; }

el objetivo de compilación

Veamos cómo se ve el archivo:

platformSettings:
    - serializedVersion: 2
      m_BuildTarget: Android
      m_MaxTextureSize: 2048
      m_ResizeAlgorithm: 0
      m_TextureFormat: 54
      m_TextureCompression: 1
      m_CompressionQuality: 50
      m_CrunchedCompression: 0
      m_AllowsAlphaSplitting: 0
      m_Overridden: 1
      m_AndroidETC2FallbackOverride: 0

m_BuildTarget:Android

I……

inserte la descripción de la imagen aquí
Bien, echemos un vistazo a la API
inserte la descripción de la imagen aquí
.

Desastre. realmente difícil. Las herramientas son demasiado difíciles.

Supongo que te gusta

Origin blog.csdn.net/qql7267/article/details/106681537
Recomendado
Clasificación