Example #1
0
 private void UpdateEmbeddedSprites(List <Sprite> newSprites)
 {
     for (int i = SpritesProperty.arraySize - 1; i >= 0; i--)
     {
         var oldSprite = SpritesProperty.GetArrayElementAtIndex(i).objectReferenceValue as Sprite;
         if (!oldSprite)
         {
             continue;
         }
         if (newSprites.Find(s => s.name == oldSprite.name) is Sprite newSprite)
         {
             EditorUtility.CopySerialized(newSprite, oldSprite);
             newSprites.Remove(newSprite);
         }
         else
         {
             UnityEngine.Object.DestroyImmediate(oldSprite, true);
         }
     }
     AssetDatabase.SaveAssets();
 }
Example #2
0
        private void UpdateCompressionRatio(IEnumerable <SourceTexture> sourceTextures, IEnumerable <AtlasTexture> atlasTextures)
        {
            var sourceSize = sourceTextures.Sum(t => GetAssetSize(t.Texture));
            var atlasSize  = atlasTextures.Sum(t => GetAssetSize(t.Texture));
            var dataSize   = GetDataSize();
            var ratio      = sourceSize / (float)(atlasSize + dataSize);
            var color      = ratio > 2 ? EditorGUIUtility.isProSkin ? "lime" : "green" : ratio > 1 ? "yellow" : "red";

            LastRatioValueProperty.stringValue = $"{sourceSize} KB / ({atlasSize} KB + {dataSize} KB) = <color={color}>{ratio:F2}</color>";
            serializedObject.ApplyModifiedProperties();
            AssetDatabase.SaveAssets();

            long GetDataSize()
            {
                var size = GetAssetSize(target);

                if (DecoupleSpriteData)
                {
                    for (int i = SpritesProperty.arraySize - 1; i >= 0; i--)
                    {
                        size += GetAssetSize(SpritesProperty.GetArrayElementAtIndex(i).objectReferenceValue);
                    }
                }
                return(size / (EditorSettings.serializationMode == SerializationMode.ForceText ? 2 : 1));
            }

            long GetAssetSize(UnityEngine.Object asset)
            {
                var assetPath = AssetDatabase.GetAssetPath(asset);

                if (!File.Exists(assetPath))
                {
                    return(0);
                }
                return(new FileInfo(assetPath).Length / 1024);
            }
        }