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(); }
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); } }