版本: 2022.3
语言: 英语
精灵打包器
精灵打包器模式

准备Sprite Packer(旧版)打包资源以便在降级后使用

此页面提供了使旧版Sprite Packer打包的现有资源能够自Unity 2020.1起在降级后继续工作的必要脚本,以下有一些限制

  1. 纹理导入器设置中,打包标记属性被设置为只读。
  2. Unity不会自动基于打包标记打包图集。您需要调用此处提供的脚本,使用IPreprocessBuildWithReport
  3. 精灵打包器模式设置将仅显示禁用和不同的精灵图集选项。精灵打包器(旧版)它将多个精灵纹理紧密打包到一个称为图集的单个纹理中。Unity提供了一套精灵打包器工具来自动化从单个精灵纹理生成图集的过程。更多信息
    词汇表中查看
    选项将不再可用。

强制Unity打包标记图集的自定义脚本

使用以下脚本来让Unity打包被分配打包标记的纹理到图集。

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEngine;
class BuildPreProcessor : IPreprocessBuildWithReport
{
    public int callbackOrder { get { return 0; } }
    public void OnPreprocessBuild(BuildReport report)
    {
        EditorSettings.spritePackerMode = SpritePackerMode.BuildTimeOnly;
UnityEditor.Sprites.Packer.RebuildAtlasCacheIfNeeded(BuildTarget.StandaloneWindows64, false);
    }
}

注意:BuildPreProcessor类继承自IPreprocessBuildWithReport,并且仅在构建时触发。

转换脚本

使用以下转换脚本将现有的打包标记图集迁移到精灵图集系统中。

using UnityEditor;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEditor.U2D;
using UnityEngine.U2D;
 
public class PrintAtlas : MonoBehaviour
{
    [MenuItem("Atlas/ConvertTags")]
    static void ConvertTags()
    {
        Dictionary<string, List<string>> TagSpriteMap = new Dictionary<string, List<string>>();
 
        foreach (string s in AssetDatabase.GetAllAssetPaths())
        {
            TextureImporter ta = AssetImporter.GetAtPath(s) as TextureImporter;
            if (ta != null)
            {
                if (ta.spritePackingTag != "")
                {
                    if (!TagSpriteMap.ContainsKey(ta.spritePackingTag))
                    {
                        List<string> newList = new List<string>();
                        TagSpriteMap[ta.spritePackingTag] = newList;
                    }
                    TagSpriteMap[ta.spritePackingTag].Add(s);
                }
            }
        }
 
        AssetDatabase.CreateFolder("Assets", "SpriteAtlas");
        foreach (var tagSprite in TagSpriteMap)
        {
            List<string> assetsforTag = tagSprite.Value;
            string alasPath = "Assets/SpriteAtlas/" + tagSprite.Key + ".spriteatlas";
            SpriteAtlas sa = new SpriteAtlas();
            AssetDatabase.CreateAsset(sa, alasPath);
 
            foreach (var asset in assetsforTag)
            {
                Debug.Log(tagSprite.Key + " = " + asset);
                Texture2D tex = AssetDatabase.LoadAssetAtPath<Texture2D>(asset);
                sa.Add(new Object[1] { tex } );
            }
        }
 
        AssetDatabase.SaveAssets();
    }
}

其他资源

精灵打包器
精灵打包器模式