private static TextureDetails GetAllTexturesFromAssets() { var details = new TextureDetails(); var assetGuidStrings = AssetDatabase.FindAssets("t:texture2D", new[] { "Assets" }); var assetsLength = assetGuidStrings.Length; for (var i = 0; i < assetsLength; i++) { var path = AssetDatabase.GUIDToAssetPath(assetGuidStrings[i]); if (EditorUtility.DisplayCancelableProgressBar("Getting All Textures from Assets", Path.GetFileName(path), (float)i / assetsLength)) { break; } var texture = AssetDatabase.LoadAssetAtPath <Texture>(path); var textureImporter = AssetImporter.GetAtPath(path) as TextureImporter; details.AddTexture(textureImporter, texture); } EditorUtility.ClearProgressBar(); return(details); }
private static TextureDetails GetAllTexturesFromScene() { var details = new TextureDetails(); var checkedMaterials = new List <Material>(); var allGameObjects = Resources.FindObjectsOfTypeAll(typeof(GameObject)); var allGameObjectsLength = allGameObjects.Length; for (var i = 0; i < allGameObjectsLength; i++) { var gameObject = allGameObjects[i] as GameObject; if (gameObject.hideFlags != HideFlags.None || EditorUtility.IsPersistent(gameObject.transform.root.gameObject)) { continue; } if (EditorUtility.DisplayCancelableProgressBar("Getting All Textures from Scene", gameObject.name, (float)i / allGameObjectsLength)) { break; } var renderers = gameObject.GetComponents <Renderer>(); for (var j = 0; j < renderers.Length; j++) { var renderer = renderers[j]; for (var k = 0; k < renderer.sharedMaterials.Length; k++) { var material = renderer.sharedMaterials[k]; if (material == null || checkedMaterials.Contains(material)) { continue; } checkedMaterials.Add(material); var shader = material.shader; for (var l = 0; l < ShaderUtil.GetPropertyCount(shader); l++) { if (ShaderUtil.GetPropertyType(shader, l) == ShaderUtil.ShaderPropertyType.TexEnv) { var texture = material.GetTexture(ShaderUtil.GetPropertyName(shader, l)); var textureImporter = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(texture)) as TextureImporter; if (textureImporter != null) { details.AddTexture(textureImporter, texture); } } } } } } EditorUtility.ClearProgressBar(); return(details); }
private void OnGUI() { GUILayout.Label("Selected Textures", Styles.BoldWrap); using (new EditorGUILayout.HorizontalScope(EditorStyles.helpBox)) { using (new EditorGUILayout.VerticalScope()) { GUILayout.Label("<b>Texture Count:</b> " + details.TextureCount, Styles.LabelRichText); GUILayout.Label("<b>Uncrunched Count:</b> " + details.UncrunchedCount, Styles.LabelRichText); GUILayout.Label("<b>Storage Size:</b> " + EditorUtility.FormatBytes(details.StorageSize), Styles.LabelRichText); } using (new EditorGUILayout.VerticalScope()) { GUILayout.Label("<b>Normal Maps:</b> " + details.NormalMaps, Styles.LabelRichText); GUILayout.Label("<b>Cubemaps:</b> " + details.Cubemaps, Styles.LabelRichText); } } importerSettingsManager.DrawSettings(); GUILayout.Space(5); GUILayout.Label("Get textures from:"); using (new EditorGUILayout.HorizontalScope()) { if (GUILayout.Button("Scene", GUILayout.Width(70), GUILayout.Height(20))) { details = GetAllTexturesFromScene(); } if (GUILayout.Button("Assets", GUILayout.Width(70), GUILayout.Height(20))) { details = GetAllTexturesFromAssets(); } GUILayout.FlexibleSpace(); if (GUILayout.Button("Revert", GUILayout.Width(70), GUILayout.Height(20))) { importerSettingsManager = new ImporterSettingsManager(); } if (GUILayout.Button("Apply", GUILayout.Width(70), GUILayout.Height(20))) { if (EditorUtility.DisplayDialog("Process Importers?", $"About to process Texture Import settings on {details.TextureCount} textures, this can take a while depending on the amount and size of them.\n\nDo you want to continue?", "Ok", "Cancel")) { importerSettingsManager.ProcessTextures(details); } } } }
public void ProcessTextures(TextureDetails details) { try { AssetDatabase.StartAssetEditing(); var importers = details.GetImporters; var count = details.TextureCount; var current = 1; foreach (var importer in importers) { EditorUtility.DisplayProgressBar("Applying New Settings", importer.assetPath, (float)current / count); if (IgnoreNormalMaps && importer.textureType == TextureImporterType.NormalMap) { continue; } if (IgnoreCubemaps && importer.textureShape == TextureImporterShape.TextureCube) { var oldMaxTextureSize = importer.maxTextureSize; var newMaxTextureSize = MaxTextureSize; switch (OverrideCubemapSettingsWhen) { case OverrideWhenSize.SmallerThan: if (oldMaxTextureSize > newMaxTextureSize) { continue; } break; case OverrideWhenSize.BiggerThan: if (oldMaxTextureSize < newMaxTextureSize) { continue; } break; } } if (!DontChangeMipMaps) { importer.mipmapEnabled = GenerateMipMaps; importer.streamingMipmaps = StreamingMipMap; } if (!DontChangeAniso) { var oldAnisoLevel = importer.anisoLevel; var newAnisoLevel = AnisoLevel; switch (OverrideAnisoWhen) { case OverrideWhenSize.Always: importer.anisoLevel = AnisoLevel; break; case OverrideWhenSize.SmallerThan: if (oldAnisoLevel < newAnisoLevel) { importer.anisoLevel = newAnisoLevel; } break; case OverrideWhenSize.BiggerThan: if (oldAnisoLevel > newAnisoLevel) { importer.maxTextureSize = newAnisoLevel; } break; } } var skipCrunchCompression = false; if (DontOverrideCrunchWhen != DontOverrideWhen.Never) { switch (DontOverrideCrunchWhen) { case DontOverrideWhen.AlreadyDisabled: if (!importer.crunchedCompression) { skipCrunchCompression = true; } break; case DontOverrideWhen.AlreadyEnabled: if (importer.crunchedCompression) { skipCrunchCompression = true; } break; } } if (!skipCrunchCompression) { var oldMaxTextureSize = importer.maxTextureSize; var newMaxTextureSize = MaxTextureSize; importer.crunchedCompression = CrunchCompression; if (importer.crunchedCompression) { switch (OverrideMaxTextureSizeWhen) { case OverrideWhenSize.Always: importer.maxTextureSize = newMaxTextureSize; break; case OverrideWhenSize.SmallerThan: if (oldMaxTextureSize < newMaxTextureSize) { importer.maxTextureSize = newMaxTextureSize; } break; case OverrideWhenSize.BiggerThan: if (oldMaxTextureSize > newMaxTextureSize) { importer.maxTextureSize = newMaxTextureSize; } break; } } } importer.SaveAndReimport(); current++; } } finally { EditorUtility.ClearProgressBar(); details.ResetStats(); AssetDatabase.StopAssetEditing(); } }