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);
        }
    }
Esempio n. 2
0
    /// <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);
    }
Esempio n. 3
0
 public void AddSpriteDetail(SpriteDetail sd)
 {
     SpriteDetails.Add(sd);
 }
Esempio n. 4
0
    /// <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);
    }