void AddImage(ref List <SpriteDetail> spriteDetails, Image image) { SpriteDetail detail = spriteDetails.Find(sd => sd.sprite == image.sprite); if (detail == null) { detail = new SpriteDetail() { sprite = image.sprite, references = new List <UObject>() }; detail.references.Add(image.gameObject); spriteDetails.Add(detail); } else { detail.references.Add(image.gameObject); } }
/// <summary> /// 获取Atlas的属性信息保存在AtlasProperty中 /// </summary> /// <param name="uiatlas"></param> /// <param name="isOriginal">指定这一属性是否是原始属性</param> /// <returns>返回的AtlasProperty中包含了uiatlas的属性</returns> public static AtlasProperty GetAtlasProperty(UIAtlas uiatlas, bool isOriginal = false) { AtlasProperty atlasProp = new AtlasProperty(); Vector4 spd, spb, spp; foreach (string sn in uiatlas.GetListOfSprites()) { UISpriteData sd = uiatlas.GetSprite(sn); spd = new Vector4(sd.x, sd.y, sd.width, sd.height); spb = new Vector4(sd.borderLeft, sd.borderRight, sd.borderBottom, sd.borderTop); spp = new Vector4(sd.paddingLeft, sd.paddingRight, sd.paddingBottom, sd.paddingTop); SpriteDetail sddd = new SpriteDetail(spd, spb, spp); atlasProp.AddSpriteDetail(sddd); } atlasProp.scale = uiatlas.scale; atlasProp.pixelSize = uiatlas.pixelSize; atlasProp.isOriginal = isOriginal; return(atlasProp); }
public void AddSpriteDetail(SpriteDetail sd) { SpriteDetails.Add(sd); }
/// <summary> /// 回复UIAtlas /// </summary> /// <param name="uiatlas"></param> public static void RecoverUIAtlasFromMeta(Object uiatlasobj) { UIAtlas uiatlas = ((GameObject)uiatlasobj).GetComponent <UIAtlas>(); string assetpath = AssetDatabase.GetAssetPath(uiatlas.gameObject); if (null == uiatlas.spriteMaterial || null == uiatlas.spriteList) { return; } //先把纹理都恢复了 Object[] dependObjs = new Object[] { uiatlas.spriteMaterial.mainTexture };//获取纹理 List <Texture2D> textureList = new List <Texture2D>(); for (int i = 0; i < dependObjs.Length; i++) { if (dependObjs[i] is Texture2D) { textureList.Add(dependObjs[i] as Texture2D); } } for (int i = textureList.Count - 1; i >= 0; --i) { try { RecoverTextureFromMeta(textureList[i]); } catch (System.Exception e) { Debug.Log(e.ToString() + " " + textureList[i].name); } } if (!AtlasAlreadyShrinked(assetpath)) {//并未缩减过,则不对它进行操作 return; } AtlasProperty afterAtlasPro = db.GetAtlasProperty(AssetDatabase.GetAssetPath(uiatlas.gameObject), true); uiatlas = ((GameObject)uiatlasobj).GetComponent <UIAtlas>(); BetterList <string> sl = uiatlas.GetListOfSprites(); if (sl == null) { return; } uiatlas.scale = afterAtlasPro.scale; uiatlas.pixelSize = afterAtlasPro.pixelSize; for (int i = 0; i < afterAtlasPro.SpriteDetails.Count; i++) { UISpriteData sd = uiatlas.GetSprite(sl[i]); SpriteDetail spd = afterAtlasPro.SpriteDetails[i]; sd.x = (int)spd.Demension.x; sd.y = (int)spd.Demension.y; sd.width = (int)spd.Demension.z; sd.height = (int)spd.Demension.w; sd.borderLeft = (int)spd.Border.x; sd.borderRight = (int)spd.Border.y; sd.borderBottom = (int)spd.Border.z; sd.borderTop = (int)spd.Border.w; sd.paddingLeft = (int)spd.Padding.x; sd.paddingRight = (int)spd.Padding.y; sd.paddingBottom = (int)spd.Padding.z; sd.paddingTop = (int)spd.Padding.w; } uiatlas.MarkAsDirty(); AtlasProperty currentAtlas = GetAtlasProperty(uiatlas, true); SaveAtlasData(uiatlas, afterAtlasPro, currentAtlas); }