Unity SpriteAtlas アトラスの作成プロセス、遭遇した問題、および解決策

Unity SpriteAtlas アトラスの作成プロセス、遭遇した問題、および解決策

1. アトラスを作成する

Unity でSpriteAtlas を使用して、必要なゲーム テクスチャ リソースに対応するアトラスを作成します。

    /// <summary>
    /// 根据贴图资源路径创建对应的图集资源
    /// </summary>
	/// <param name="atlasName">贴图资源路径</param>
    private static void CreateSpriteAtlas(string atlasName)
    {
    
    
        SpriteAtlas atlas = new SpriteAtlas();
        var atlasPath = "Assets/Resources/Atlas/" + atlasName + ".spriteatlas";

        SpriteAtlasPackingSettings packingSetting = new SpriteAtlasPackingSettings()
        {
    
    
            enableRotation = false,
            enableTightPacking = false,
            padding = 4,
        };

        atlas.SetPackingSettings(packingSetting);     

        var pathArr = Directory.GetFiles("Assets/ResourcesLib/Atlas/" + atlasName + "/");
        var spriteList = new List<Sprite>();
        for (int i = 0; i < pathArr.Length; i++)
        {
    
    
        	//不需要.meta文件打进图集之中
            if (Path.GetExtension(pathArr[i]) == ".meta")
                continue;
            var sprite = AssetDatabase.LoadAssetAtPath<Sprite>(pathArr[i]);
            if (sprite != null)
            {
    
    
                spriteList.Add(sprite);
            }
        }

        atlas.Add(spriteList.ToArray());
     	//创建对应的资源
        AssetDatabase.CreateAsset(atlas, atlasPath);
    }

2. 発生した問題

テクスチャ リソースはパッケージに含まれていません。テキスト モードでアトラスを開くと、テキスト内の m_PackedSprites の配列と m_PackedSpriteNamesToIndex の配列が両方とも空であり、値が含まれていないことがわかります。これら 2 つの変数値のないものが使用されています 対応するテクスチャ リソースが見つかりません。
ここに画像の説明を挿入します

3.解決策

Unity 独自のインターフェイス SpriteAtlasUtility.PackAtlases(spriteAtlases.ToArray(), activeBuildTarget,true) を使用して、生成されたアトラス上のインターフェイスを再呼び出しし、対応する変数パラメーターをエクスポートしたところ、アトラスは正常に使用されました。

    /// <summary>
    /// 给图集资源创建m_PackedSprites和m_PackedSpriteNamesToIndex数据
    /// </summary>
    /// <param name="arr">图集路径</param>
    public static void CreateSpriteAltasPackedSprites(object[] arr)
    {
    
    
        SpriteAtlas[] spriteAtlas = new SpriteAtlas[arr.Length];
        for (int i = 0; i < arr.Length; i++)
        {
    
    
            spriteAtlas[i]= arr[i] as SpriteAtlas;
      
        }
        //自动生成图集的接口
#if UNITY_WEBGL
        SpriteAtlasUtility.PackAtlases(spriteAtlas,BuildTarget.WebGL);
#else
        SpriteAtlasUtility.PackAtlases(spriteAtlas,BuildTarget.StandaloneWindows);
#endif
    }

上記は、SpriteAtlas でアトラスを印刷するときに遭遇した問題の解決策です。問題の解決を手伝ってくれたソリューションの作成者 (antiwb3) に感謝します
https://zhuanlan.zhihu.com/p/357822794

おすすめ

転載: blog.csdn.net/qq_46005796/article/details/127928832