//将一个多图文件夹的所有贴图资源的纹理数据打包填充成一张大贴图 private static void CreateFolderModeAtlas(string[] paths, string atlasPath) { Texture2D[] textures = new Texture2D[paths.Length]; //Texture数组,一个多图文件夹中包含的图片个数,每个图片资源对应一个Texture string[] textureNames = new string[textures.Length]; //texture的资源名称数组 for (int i = 0; i < textures.Length; i++) //遍历 { textures[i] = AssetDatabase.LoadAssetAtPath(paths[i], typeof(Texture2D)) as Texture2D; //按路径加载贴图资源 textureNames[i] = textures[i].name; //命名 textures[i] = TextureClamper.Clamp(textures[i]); //填充图集的Texture数据 } Texture2D atlas = new Texture2D(ATLAS_MAX_SIZE, ATLAS_MAX_SIZE); //创建图集 //将多个纹理打包到一个纹理图集中。Rect[] 包含每个输入纹理在图集中的 UV 坐标的矩形数组,如果打包失败,则为 null。 //rects 为每个texture的矩形框数组 Rect[] rects = atlas.PackTextures(textures, 0, ATLAS_MAX_SIZE, false); //textures要打包到图集的纹理的数组,0 纹理间的像素填充,ATLAS_MAX_SIZE 纹理最大尺寸,false,不可读?false AtlasWriter.Write(atlas, atlasPath); //写入纹理数据 AssetDatabase.ImportAsset(atlasPath, ImportAssetOptions.ForceUpdate); //导入atlasPath路径下的资源,由用户发起的资源导入。 //将每一张sprite导入一个大图集,路径,uv信息,名称,边界vector4精灵的边缘边框大小[以像素为单位]X=左边框/Y=下边框/Z=右边框/W=上边框 TextureImporterUtil.CreateMultipleSpriteImporter( atlasPath, //大图的路径 rects, //每张Sprite的矩形UV框 textureNames, //每张Sprite的名称 new Vector4[textures.Length], //border数组 atlas.width, //图集的宽度 atlas.height, //图集的高度 ATLAS_MAX_SIZE, //图集的最大尺寸 TextureImporterFormat.DXT5 //纹理导入的格式 ); //TextureImporterUtil.SetAtlasPackingTag(atlasPath, GetPackingTagFromPath(atlasPath)); AssetDatabase.ImportAsset(atlasPath, ImportAssetOptions.ForceUpdate);//导入atlasPath路径下的资源,由用户发起的资源导入。 }
private static TextureData[] ReadTexture(string[] assetPaths) { TextureData[] textureDatas = new TextureData[assetPaths.Length]; for (int i = 0; i < assetPaths.Length; i++) { Sprite sprite = AssetDatabase.LoadAssetAtPath(assetPaths[i], typeof(Sprite)) as Sprite; TextureData data = new TextureData(); data.name = sprite.name; Vector4 border = sprite.border; data.top = (int)border.w; data.right = (int)border.z; data.bottom = (int)border.y; data.left = (int)border.x; Texture2D texture = AssetDatabase.LoadAssetAtPath(assetPaths[i], typeof(Texture2D)) as Texture2D; /* * if(data.IsScale9Grid) * { * texture = Scale9GridTextureProcessor.Process(texture, data.top, data.right, data.bottom, data.left); * } */ if (textureDatas.Length > 1) { texture = TextureClamper.Clamp(texture); } else { texture = TextureClamper.ClampSingle(texture); } data.texture = texture; textureDatas[i] = data; } return(textureDatas); }
//读取一个图片资源路径列表的数据,返回TextureData数组 private static TextureData[] ReadTextures(string[] assetPaths) { TextureData[] textureDatas = new TextureData[assetPaths.Length]; //创建TextureData数组 for (int i = 0; i < assetPaths.Length; i++) //遍历路径列表 { Sprite sprite = AssetDatabase.LoadAssetAtPath(assetPaths[i], typeof(Sprite)) as Sprite; //加载图片资源 Sprite TextureData data = new TextureData(); //创建TextureData对象 if (sprite == null) //Sprite不存在则报错 { Debug.LogErrorFormat("ReadTextures sprite is null at assetPaths[{0}]", assetPaths[i]); } data.name = sprite.name; //赋予名称 Vector4 border = sprite.border; //v4变量 返回sprite的边框的大小 X=左边框/Y=下边框/Z=右边框/W=上边框 data.top = (int)border.w; data.right = (int)border.z; data.bottom = (int)border.y; data.left = (int)border.x; Texture2D texture = AssetDatabase.LoadAssetAtPath(assetPaths[i], typeof(Texture2D)) as Texture2D; if (textureDatas.Length > 1) //包含多个图片资源 { texture = TextureClamper.Clamp(texture); //给每个单元图片四周补两像素 } else { texture = TextureClamper.ClampSingle(texture); //单图不进行外边框的2像素填充 } data.texture = texture; //texture数据赋给TextureData的texture属性 data.width = texture.width; //宽 data.height = texture.height; //高 textureDatas[i] = data; //存储下来 } return(textureDatas); //将处理好的TextureData数组返回 }