Herramienta de generación automática Unity SpriteAtlas (atlas)

Herramienta de generación automática Unity SpriteAtlas (atlas)

¿Qué es un atlas?

Un atlas es un recurso que combina múltiples texturas en una textura combinada. Se puede llamar a esta textura única para emitir una única llamada de dibujo en lugar de emitir múltiples llamadas de dibujo, lo que permite un acceso único a la textura comprimida con una pequeña sobrecarga de rendimiento.

¿Por qué hacer un atlas?

  1. Reduzca DrawCall, solo se necesita un DrawCall para un atlas
  2. El atlas combina una o más imágenes en una potencia de 2 para reducir el tamaño del recurso.
  3. Obviamente, es más apropiado entregar todas las operaciones de dibujo mostradas a la GPU, que se especializa en el procesamiento de imágenes, que a la CPU, para que la CPU inactiva pueda concentrarse en procesar las operaciones lógicas del juego.

Cosas a tener en cuenta al hacer un atlas

  1. No coloque los recursos de imágenes que deben incluirse en el atlas en la carpeta Recursos, porque los recursos de esta carpeta no se incluirán en el atlas y esto también duplicará el tamaño de los recursos.

Generar automáticamente el código fuente de la herramienta Atlas

using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEditor.U2D;
using UnityEngine;
using UnityEngine.U2D;

namespace S
{
    public class AutoAtlas
    {
        static SpriteAtlasPackingSettings packSetting = new SpriteAtlasPackingSettings()
        {
            blockOffset = 1,
            padding = 2,
            enableRotation = false,
            enableTightPacking = false
        };

        private static SpriteAtlasTextureSettings textureSetting = new SpriteAtlasTextureSettings()
        {
            sRGB = true,
            filterMode = FilterMode.Bilinear,
        };

        private static TextureImporterPlatformSettings importerSetting = new TextureImporterPlatformSettings()
        {
            maxTextureSize = 2048,
            compressionQuality = 50,
        };

        [MenuItem("Assets/创建图集", false, 19)]
        static void CreateAtlas()
        {
            var select = Selection.activeObject;
            var path = AssetDatabase.GetAssetPath(select);
            CreateAtlasOfAssetDir(path);
        }

        public static void CreateAtlasOfAssetDir(string dirAssetPath)
        {
            if (string.IsNullOrEmpty(dirAssetPath) || Path.HasExtension(dirAssetPath))
            {
                Debug.LogError("当前选中对象不是文件夹,请选择对应文件夹重新创建图集");
                return;
            }
            
            SpriteAtlas atlas = new SpriteAtlas();
            atlas.SetPackingSettings(packSetting);
            atlas.SetTextureSettings(textureSetting);
            atlas.SetPlatformSettings(importerSetting);

            var atlasPath = $"{dirAssetPath}/New Atlas.spriteatlas";
            TryAddSprites(atlas, dirAssetPath);
            AssetDatabase.CreateAsset(atlas, atlasPath);
            AssetDatabase.SaveAssets();
            Selection.activeObject = AssetDatabase.LoadAssetAtPath<Object>(atlasPath);
        }

        static void TryAddSprites(SpriteAtlas atlas, string dirPath)
        {
            string[] files = Directory.GetFiles(dirPath);
            if (files == null || files.Length == 0) return;

            Sprite sprite;
            List<Sprite> spriteList = new List<Sprite>();
            foreach (var file in files)
            {
                if (file.EndsWith(".meta")) continue;
                sprite = AssetDatabase.LoadAssetAtPath<Sprite>(file);
                if (sprite == null) continue;
                spriteList.Add(sprite);
            }

            if (spriteList.Count > 0) atlas.Add(spriteList.ToArray());
        }
    }
}

Instrucciones

  1. Seleccione la carpeta
  2. Clic derecho->Crear álbum
  3. La creación es exitosa y todas las imágenes de sprites en la carpeta seleccionada se ingresan en el álbum recién creado.
    Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_42498461/article/details/128874546
Recomendado
Clasificación