Unity SpriteAtlas 打图集流程,与遇到的问题和解决方法

Unity SpriteAtlas 打图集流程,与遇到的问题和解决方法

  • 1.创建图集
  • 2.遇到的问题
  • 3.解决方法

1.创建图集

在unity里面使用SpriteAtlas ,把需要用到的游戏贴图资源,创建成对应的图集。

    /// 
    /// 根据贴图资源路径创建对应的图集资源
    /// 
	/// 贴图资源路径
    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的数组都是为空的,没有值在里面,没有值的这两个变量,是用不了对应的贴图资源的。
Unity SpriteAtlas 打图集流程,与遇到的问题和解决方法_第1张图片

3.解决方法

我通过unity自带的接口SpriteAtlasUtility.PackAtlases(spriteAtlases.ToArray(), activeBuildTarget,true),重新对着生成出来的图集调用接口,导出了对应的变量参数,图集因而成功使用。

    /// 
    /// 给图集资源创建m_PackedSprites和m_PackedSpriteNamesToIndex数据
    /// 
    /// 图集路径
    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

你可能感兴趣的:(Unity干货,unity,贴图)