Outil de génération automatique Unity SpriteAtlas (atlas)

Outil de génération automatique Unity SpriteAtlas (atlas)

Qu'est-ce qu'un atlas

Un atlas est une ressource qui combine plusieurs textures en une texture combinée. Cette texture unique peut être appelée pour émettre un seul appel draw plutôt que d'émettre plusieurs appels draw, permettant un accès unique à la texture compressée avec une légère surcharge de performances.

Pourquoi faire un atlas ?

  1. Réduisez DrawCall, un seul DrawCall est nécessaire pour un atlas
  2. L'atlas combine une ou plusieurs images en une puissance de 2 pour réduire la taille des ressources.
  3. Il est évidemment plus approprié de confier toutes les opérations de dessin affichées au GPU, spécialisé dans le traitement des images, plutôt que de les confier au CPU, afin que le CPU inactif puisse se concentrer sur le traitement des opérations logiques du jeu.

Choses à noter lors de la création d'un atlas

  1. Ne placez pas les ressources d'images qui doivent être incluses dans l'atlas dans le dossier Ressources, car les ressources de ce dossier ne seront pas incluses dans l'atlas, ce qui doublera également la taille des ressources.

Générer automatiquement le code source de l'outil 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());
        }
    }
}

Instructions

  1. Sélectionner le dossier
  2. Clic droit -> Créer un album
  3. La création est réussie et toutes les images de sprites du dossier sélectionné sont enregistrées dans l'album nouvellement créé.
    Insérer la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42498461/article/details/128874546
conseillé
Classement