Ferramenta de geração automática Unity SpriteAtlas (atlas)

Ferramenta de geração automática Unity SpriteAtlas (atlas)

O que é um atlas

Um atlas é um recurso que combina múltiplas texturas em uma textura combinada. Esta textura única pode ser chamada para emitir uma única chamada de desenho em vez de emitir múltiplas chamadas de desenho, permitindo acesso único à textura compactada com uma pequena sobrecarga de desempenho

Por que fazer um atlas?

  1. Reduza o DrawCall, apenas um DrawCall é necessário para um atlas
  2. O atlas combina uma ou mais imagens em uma imagem de potência de 2 para reduzir o tamanho do recurso.
  3. Obviamente, é mais apropriado entregar todas as operações de desenho exibidas à GPU, especializada em processamento de imagens, do que entregá-las à CPU, para que a CPU ociosa possa se concentrar no processamento das operações lógicas do jogo.

Coisas a serem observadas ao fazer um atlas

  1. Não coloque os recursos de imagem que precisam ser incluídos no atlas na pasta Recursos, pois os recursos desta pasta não serão incluídos no atlas e isso também dobrará o tamanho dos recursos.

Gere automaticamente o código-fonte da ferramenta 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());
        }
    }
}

Instruções

  1. Selecione a pasta
  2. Clique com o botão direito->Criar álbum
  3. A criação foi bem-sucedida e todas as imagens de sprites na pasta selecionada são inseridas no álbum recém-criado.
    Insira a descrição da imagem aqui

Acho que você gosta

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