static public bool AutoBuildAtlasFromListTexture(List <Texture2D> listTexture, List <DataAnimAnalytics> listJsonAnim, TrimType trimType, string texturePath, int pading) { float prog = 0.0f; EditorUtility.DisplayCancelableProgressBar("Collecting Textures", "Process...", prog); try { Dictionary <string, EAPInfoAttachment> dicPivot = new Dictionary <string, EAPInfoAttachment>(); for (int i = 0; i < listJsonAnim.Count; i++) { DataAnimAnalytics dataAnalytic = listJsonAnim[i]; foreach (KeyValuePair <string, EAPInfoAttachment> pair in dataAnalytic.jsonFinal.dicPivot) { dicPivot[pair.Value.spriteName] = pair.Value; } } List <SpriteElement> listSprite = new List <SpriteElement>(); for (int i = 0; i < listTexture.Count; i++) { Object obj = listTexture[i]; if (obj is Texture2D) { Texture2D tex = (Texture2D)obj; SpriteElement element = new SpriteElement(tex); if (trimType == TrimType.Trim2nTexture || trimType == TrimType.TrimMinimum) { if (!element.TrimTexture()) { element.CloneFromOriginTexture(); } } else { element.CloneFromOriginTexture(); } foreach (KeyValuePair <string, EAPInfoAttachment> pair in dicPivot) { if (pair.Value.spriteName == tex.name) { //Debug.LogError(pair.Value.spriteName); element.SetPivot(new Vector2(pair.Value.x, pair.Value.y)); break; } } listSprite.Add(element); prog = (float)(i + 1) / listTexture.Count; EditorUtility.DisplayCancelableProgressBar("Collecting Textures", "Process...", prog); } } if (listSprite.Count > 0) { bool result = BuildAtlas(trimType, listSprite, dicPivot, texturePath, pading); // GC memory for (int i = 0; i < listSprite.Count; i++) { GameObject.DestroyImmediate(listSprite[i].texture); listSprite[i] = null; } return(result); } return(false); } catch (System.Exception ex) { Debug.LogError("Error:" + ex.Message); EditorUtility.ClearProgressBar(); return(false); } }
static public bool UpdateAtlasSpriteInfo(string pathOutput, List <DataAnimAnalytics> listAnim, float scale) { //Debug.LogError(scale); if (listAnim.Count < 1) { return(false); } Dictionary <string, EAPInfoAttachment> dicPivotCache = new Dictionary <string, EAPInfoAttachment>(); for (int i = 0; i < listAnim.Count; i++) { DataAnimAnalytics dataAnalytic = listAnim[i]; //Debug.LogError(Pathfinding.Serialization.JsonFx.JsonWriter.Serialize(dataAnalytic.jsonFinal)); foreach (KeyValuePair <string, EAPInfoAttachment> pair in dataAnalytic.jsonFinal.dicPivot) { dicPivotCache[pair.Value.spriteName] = pair.Value; } } Dictionary <string, List <EAPInfoAttachment> > dicPivot = new Dictionary <string, List <EAPInfoAttachment> >(); for (int i = 0; i < listAnim.Count; i++) { DataAnimAnalytics dataAnalytic = listAnim[i]; foreach (KeyValuePair <string, EAPInfoAttachment> pair in dataAnalytic.jsonFinal.dicPivot) { List <EAPInfoAttachment> list = null; dicPivot.TryGetValue(pair.Value.spriteName, out list); if (list == null) { list = new List <EAPInfoAttachment>(); } bool haveExist = false; for (int x = 0; x < list.Count; x++) { if (list[x].spriteName == pair.Key) { haveExist = true; break; } } if (!haveExist) { list.Add(pair.Value); } dicPivot[pair.Value.spriteName] = list; } } TextureImporter ti = AssetImporter.GetAtPath(pathOutput) as TextureImporter; TextureImporterSettings settings = new TextureImporterSettings(); ti.ReadTextureSettings(settings); SpriteMetaData[] lstMetaSprite = ti.spritesheet; Dictionary <string, SpriteMetaData> dicSpriteMeta = new Dictionary <string, SpriteMetaData>(); bool haveNew = false; for (int i = 0; i < lstMetaSprite.Length; i++) { SpriteMetaData spriteMetaData = lstMetaSprite[i]; if (Mathf.Abs(scale - 1f) > Mathf.Epsilon) { Rect rect = spriteMetaData.rect; rect.x = rect.x * scale; rect.y = rect.y * scale; rect.width = rect.width * scale; rect.height = rect.height * scale; spriteMetaData.rect = rect; haveNew = true; } dicSpriteMeta[lstMetaSprite[i].name] = spriteMetaData; } foreach (KeyValuePair <string, List <EAPInfoAttachment> > pair in dicPivot) { List <EAPInfoAttachment> list = pair.Value; for (int i = 0; i < list.Count; i++) { if (!dicSpriteMeta.ContainsKey(list[i].spriteName)) // sprite new { if (dicSpriteMeta.ContainsKey(list[i].spriteName)) { SpriteMetaData currentMeta = dicSpriteMeta[list[i].spriteName]; SpriteMetaData metaSprite = new SpriteMetaData(); metaSprite.name = list[i].spriteName; metaSprite.rect = currentMeta.rect; metaSprite.alignment = currentMeta.alignment; EAPInfoAttachment pivotCache = null; dicPivotCache.TryGetValue(list[i].spriteName, out pivotCache); if (pivotCache == null) { pivotCache = list[i]; } //Debug.LogError(pivotCache.name+","+list[i].name+","+pivotCache.name+","+pivotCache.isOptimze); if (!pivotCache.isOptimze) { metaSprite.pivot = new Vector2(list[i].x, list[i].y); //currentMeta.pivot; } else { float pivotX = list[i].x * pivotCache.originalRect.width * scale; float pivotY = list[i].y * pivotCache.originalRect.height * scale; float oWidth = pivotCache.optimizeRect.width * scale; float oHeight = pivotCache.optimizeRect.height * scale; if (oWidth < 1) { oWidth = 1; } if (oHeight < 1) { oHeight = 1; } pivotX = pivotX - pivotCache.startX * scale; pivotY = pivotY - pivotCache.startY * scale; pivotX = pivotX / oWidth; pivotY = pivotY / oHeight; metaSprite.pivot = new Vector2(pivotX, pivotY); } dicSpriteMeta[metaSprite.name] = metaSprite; haveNew = true; } } } } if (haveNew) { Texture2D mainTexture = AssetDatabase.LoadAssetAtPath(pathOutput, typeof(Texture2D)) as Texture2D; lstMetaSprite = new SpriteMetaData[dicSpriteMeta.Count]; int count = 0; foreach (KeyValuePair <string, SpriteMetaData> pair in dicSpriteMeta) { lstMetaSprite[count] = pair.Value; count++; } ti.isReadable = true; ti.mipmapEnabled = false; ti.spritesheet = lstMetaSprite; ti.textureType = TextureImporterType.Sprite; ti.spriteImportMode = SpriteImportMode.Multiple; ti.spritePixelsPerUnit = 100; settings.textureFormat = TextureImporterFormat.ARGB32; settings.npotScale = TextureImporterNPOTScale.None; settings.alphaIsTransparency = true; ti.SetTextureSettings(settings); ti.maxTextureSize = 4096; ti.mipmapEnabled = false; ti.spriteImportMode = SpriteImportMode.Multiple; AssetDatabase.ImportAsset(pathOutput); EditorUtility.SetDirty(mainTexture); AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); AssetDatabase.ImportAsset(pathOutput); } return(true); }