// [UNITY-SKILL:SPRITEATLAS] using UnityEditor; using UnityEditor.U2D; using UnityEngine; /// /// Demonstrates optimizing texture settings for SpriteAtlases. /// Proper texture settings are critical for performance and memory usage. /// public static class OptimizeTextureSettingsExample { /// /// Configures optimal texture settings for UI atlases. /// UI sprites typically need high quality and alpha channel. /// public static void ConfigureUITextureSettings(string atlasPath) { SpriteAtlasImporter importer = AssetImporter.GetAtPath(atlasPath) as SpriteAtlasImporter; if (importer == null) return; // UI textures need good quality with alpha var textureSettings = importer.textureSettings; textureSettings.filterMode = FilterMode.Bilinear; importer.textureSettings = textureSettings; // Set appropriate format for UI (with alpha) var platformSettings = importer.GetPlatformSettings("DefaultTexturePlatform"); platformSettings.maxTextureSize = 2048; platformSettings.format = TextureImporterFormat.ASTC_6x6; platformSettings.compressionQuality = 50; importer.SetPlatformSettings(platformSettings); importer.SaveAndReimport(); } /// /// Configures optimal texture settings for game object atlases. /// Game objects can use lower quality and don't always need alpha. /// public static void ConfigureGameObjectTextureSettings(string atlasPath) { SpriteAtlasImporter importer = AssetImporter.GetAtPath(atlasPath) as SpriteAtlasImporter; if (importer == null) return; // Game object textures can use lower quality var textureSettings = importer.textureSettings; textureSettings.filterMode = FilterMode.Trilinear; importer.textureSettings = textureSettings; // Use DXT5 for desktop, ASTC for mobile var platformSettings = importer.GetPlatformSettings("DefaultTexturePlatform"); platformSettings.maxTextureSize = 1024; platformSettings.format = TextureImporterFormat.DXT5; platformSettings.compressionQuality = 50; importer.SetPlatformSettings(platformSettings); importer.SaveAndReimport(); } /// /// Configures texture settings for a specific platform. /// public static void ConfigurePlatformTextureSettings(string atlasPath, string platformName, int maxTextureSize, TextureImporterFormat format) { SpriteAtlasImporter importer = AssetImporter.GetAtPath(atlasPath) as SpriteAtlasImporter; if (importer == null) return; importer.SetPlatformSettings(new TextureImporterPlatformSettings { name = "DefaultTexturePlatform", maxTextureSize = maxTextureSize, format = format, compressionQuality = 50 }); importer.SaveAndReimport(); } /// /// Optimizes texture settings for mobile platforms. /// Focuses on reducing memory usage and improving loading times. /// public static void OptimizeForMobile(string atlasPath) { SpriteAtlasImporter importer = AssetImporter.GetAtPath(atlasPath) as SpriteAtlasImporter; if (importer == null) return; // Android settings importer.SetPlatformSettings(new TextureImporterPlatformSettings { name = "Android", maxTextureSize = 1024, format = TextureImporterFormat.ETC2_RGB4, compressionQuality = 100, }); // iOS settings importer.SetPlatformSettings(new TextureImporterPlatformSettings { name = "iOS", maxTextureSize = 1024, format = TextureImporterFormat.ASTC_6x6, compressionQuality = 100 }); importer.SaveAndReimport(); } /// /// Optimizes texture settings for web deployment. /// Focuses on smaller file sizes and faster loading. /// public static void OptimizeForWeb(string atlasPath) { SpriteAtlasImporter importer = AssetImporter.GetAtPath(atlasPath) as SpriteAtlasImporter; if (importer == null) return; importer.SetPlatformSettings(new TextureImporterPlatformSettings { name = "WebGL", maxTextureSize = 1024, format = TextureImporterFormat.DXT5Crunched, compressionQuality = 100 }); importer.SaveAndReimport(); } } /// /// Editor window for batch optimizing texture settings across multiple atlases. /// public class OptimizeTextureSettingsWindow : EditorWindow { private string _atlasFolder = "Assets/Atlases"; private bool _optimizeForMobile = false; private bool _optimizeForWeb = false; [MenuItem("Tools/Optimize Atlas Texture Settings")] public static void ShowWindow() { GetWindow("Optimize Atlases"); } private void OnGUI() { EditorGUILayout.LabelField("Batch Optimize Texture Settings", EditorStyles.boldLabel); _atlasFolder = EditorGUILayout.TextField("Atlas Folder", _atlasFolder); _optimizeForMobile = EditorGUILayout.Toggle("Optimize for Mobile", _optimizeForMobile); _optimizeForWeb = EditorGUILayout.Toggle("Optimize for Web", _optimizeForWeb); if (GUILayout.Button("Optimize Atlases")) { BatchOptimize(); } } private void BatchOptimize() { string[] guids = AssetDatabase.FindAssets("t:SpriteAtlasAsset", new[] { _atlasFolder }); int processed = 0; foreach (string guid in guids) { string path = AssetDatabase.GUIDToAssetPath(guid); SpriteAtlasImporter importer = AssetImporter.GetAtPath(path) as SpriteAtlasImporter; if (importer != null) { if (_optimizeForMobile) { OptimizeTextureSettingsExample.OptimizeForMobile(path); } else if (_optimizeForWeb) { OptimizeTextureSettingsExample.OptimizeForWeb(path); } processed++; } } Debug.Log($"Optimized {processed} atlases"); AssetDatabase.Refresh(); } }