static void PackAllSpriteAtlases() { ConfigRoot config = LoadAtlasConfig(); if (config == null) { return; } AtlasSetting[] settings = config.atlasSettings; if (settings == null) { return; } for (int i = 0, imax = settings.Length; i < imax; i++) { AtlasSetting setting = settings[i]; Pack(true, setting.texturesFolder, setting.atlasPath, setting.padding, setting.maxSize, setting.trimAlpha, setting.unityPacking, setting.forceSquare); } }
void OnGUI() { if (!mGUIStyleInited) { mGUIStyleInited = true; mStyleTextArea = GUI.skin.FindStyle("TextArea") ?? GUI.skin.FindStyle("AS TextArea"); mStyleBoldLabel = "BoldLabel"; mStyleSearch = "SearchTextField"; mStyleSearchCancel = "SearchCancelButton"; mStyleWhiteLabel = "WhiteLabel"; } if (mSettings == null) { mSettings = new List <AtlasSetting>(); mSettings.AddRange(LoadAtlasConfig().atlasSettings); mDefaultUnityPacking = default_unity_packing; mDefaultForceSquare = default_force_square; mDefaultTrimAlpha = default_trim_alpha; mDefaultPadding = default_padding; mDefaultMaxSize = default_max_size; } Color cachedColor; GUILayout.Space(2f); EditorGUILayout.LabelField("Default Settings :", mStyleBoldLabel); EditorGUILayout.BeginHorizontal(GUILayout.MinHeight(10f)); GUILayout.Space(12f); EditorGUILayout.BeginHorizontal(mStyleTextArea, GUILayout.MinHeight(10f)); GUILayout.Space(4f); EditorGUILayout.BeginVertical(); EditorGUI.BeginChangeCheck(); mDefaultUnityPacking = EditorGUILayout.ToggleLeft(" unity packing", mDefaultUnityPacking, GUILayout.Width(140f)); if (EditorGUI.EndChangeCheck()) { default_unity_packing = mDefaultUnityPacking; } EditorGUI.BeginDisabledGroup(mDefaultUnityPacking); EditorGUI.BeginChangeCheck(); mDefaultForceSquare = EditorGUILayout.ToggleLeft(" force square atlas", mDefaultForceSquare, GUILayout.Width(140f)); if (EditorGUI.EndChangeCheck()) { default_force_square = mDefaultForceSquare; } EditorGUI.EndDisabledGroup(); EditorGUI.BeginChangeCheck(); mDefaultTrimAlpha = EditorGUILayout.ToggleLeft(" trim alpha", mDefaultTrimAlpha, GUILayout.Width(140f)); if (EditorGUI.EndChangeCheck()) { default_trim_alpha = mDefaultTrimAlpha; } EditorGUILayout.EndVertical(); GUILayout.FlexibleSpace(); GUILayout.FlexibleSpace(); EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Padding", GUILayout.Width(56f)); cachedColor = GUI.backgroundColor; GUI.backgroundColor = mDefaultPadding < 0 ? Color.red : cachedColor; EditorGUI.BeginChangeCheck(); mDefaultPadding = EditorGUILayout.IntField(mDefaultPadding, GUILayout.Width(64f)); if (EditorGUI.EndChangeCheck() && mDefaultPadding >= 0) { default_padding = mDefaultPadding; } GUI.backgroundColor = cachedColor; EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Max Size", GUILayout.Width(56f)); cachedColor = GUI.backgroundColor; GUI.backgroundColor = mDefaultMaxSize < 32 || ((mDefaultMaxSize - 1) & mDefaultMaxSize) != 0 ? Color.red : cachedColor; EditorGUI.BeginChangeCheck(); mDefaultMaxSize = EditorGUILayout.IntField(mDefaultMaxSize, GUILayout.Width(64f)); if (EditorGUI.EndChangeCheck() && mDefaultMaxSize >= 32 && ((mDefaultMaxSize - 1) & mDefaultMaxSize) == 0) { default_max_size = mDefaultMaxSize; } GUI.backgroundColor = cachedColor; EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); GUILayout.Space(2f); EditorGUILayout.EndHorizontal(); GUILayout.Space(6f); EditorGUILayout.BeginHorizontal(); GUILayout.Space(4f); EditorGUILayout.LabelField("Sprite Atlas :", mStyleBoldLabel, GUILayout.Width(90f)); EditorGUILayout.Space(); EditorGUILayout.LabelField("Find : ", GUILayout.Width(36f)); EditorGUI.BeginChangeCheck(); mSearchKey = GUILayout.TextField(mSearchKey, mStyleSearch, GUILayout.Width(190f)); if (EditorGUI.EndChangeCheck()) { mSearchKeyLower = mSearchKey.ToLower(); } if (GUILayout.Button("", mStyleSearchCancel)) { mSearchKey = ""; mSearchKeyLower = ""; } EditorGUILayout.EndHorizontal(); bool isDirty = false; mAtlasesScroll = EditorGUILayout.BeginScrollView(mAtlasesScroll, false, false); EditorGUILayout.BeginHorizontal(); //h1 GUILayout.Space(4f); EditorGUILayout.BeginVertical(); int removeAt = -1; int insertAt = -1; for (int i = 0; i < mSettings.Count; i++) { bool changed = false; AtlasSetting setting = mSettings[i]; if (setting.atlasPath.StartsWith("Assets/") ? setting.atlasPath.IndexOf(mSearchKeyLower, 7, StringComparison.OrdinalIgnoreCase) < 0 : setting.atlasPath.IndexOf(mSearchKeyLower, StringComparison.OrdinalIgnoreCase) < 0 && setting.texturesFolder.IndexOf(mSearchKeyLower, StringComparison.OrdinalIgnoreCase) < 0) { continue; } GUILayout.Space(3f); cachedColor = GUI.backgroundColor; GUI.backgroundColor = (i & 1) == 0 ? new Color(0.5f, 0.5f, 0.5f) : new Color(0.7f, 0.7f, 0.7f); EditorGUILayout.BeginVertical(mStyleTextArea, GUILayout.MinHeight(20f)); GUI.backgroundColor = cachedColor; EditorGUILayout.BeginHorizontal(); //h2 int hashSetting = setting.GetHashCode(); AnimBool show; if (!mHideAtlases.TryGetValue(hashSetting, out show)) { show = mDefaultAtlasShow; } string atlasLabel = (show.value ? "\u25BC " : "\u25BA ") + setting.atlasPath; if (GUILayout.Button(atlasLabel, mStyleWhiteLabel)) { if (show == mDefaultAtlasShow) { show = new AnimBool(mDefaultAtlasShow.value, Repaint); mHideAtlases.Add(hashSetting, show); } show.target = !show.target; } bool packable = IsAtlasPathValid(setting.atlasPath) && !string.IsNullOrEmpty(setting.texturesFolder) && setting.padding >= 0 && setting.maxSize >= 32 && ((setting.maxSize - 1) & setting.maxSize) == 0; cachedColor = GUI.backgroundColor; GUI.backgroundColor = packable ? Color.green : cachedColor; EditorGUI.BeginDisabledGroup(!packable); if (GUILayout.Button("Pack", GUILayout.Width(64f))) { PackSingleAtlas(setting); } EditorGUI.EndDisabledGroup(); GUI.backgroundColor = Color.red; if (GUILayout.Button("X", GUILayout.Width(20f))) { removeAt = i; } GUI.backgroundColor = cachedColor; EditorGUILayout.EndHorizontal(); //h2 GUILayout.Space(4f); if (EditorGUILayout.BeginFadeGroup(show.faded)) { EditorGUILayout.BeginHorizontal(); //h2 GUILayout.Space(2f); EditorGUILayout.BeginHorizontal(mStyleTextArea); //h3 GUILayout.Space(8f); EditorGUILayout.BeginVertical(); GUILayout.Space(2f); EditorGUI.BeginChangeCheck(); EditorGUILayout.BeginHorizontal(); //h4 EditorGUILayout.LabelField("Textures Folder", GUILayout.Width(96f)); cachedColor = GUI.backgroundColor; GUI.backgroundColor = string.IsNullOrEmpty(setting.texturesFolder) ? Color.red : cachedColor; setting.texturesFolder = EditorGUILayout.TextField(setting.texturesFolder); GUI.backgroundColor = cachedColor; if (GUILayout.Button("Browse", GUILayout.Width(60f))) { string t = EditorUtility.OpenFolderPanel("Textures Folder", setting.texturesFolder, ""); if (!string.IsNullOrEmpty(t)) { prev_sprites_folder = Path.GetDirectoryName(t).Replace('\\', '/'); string projPath = Application.dataPath; projPath = projPath.Substring(0, projPath.Length - 7); if (t.StartsWith(projPath)) { t = t.Substring(projPath.Length + 1); } setting.texturesFolder = t; changed = true; } } EditorGUILayout.EndHorizontal(); //h4 EditorGUILayout.BeginHorizontal(); //h4 EditorGUILayout.LabelField("SpriteAtals Path", GUILayout.Width(96f)); cachedColor = GUI.backgroundColor; GUI.backgroundColor = IsAtlasPathValid(setting.atlasPath) ? cachedColor : Color.red; setting.atlasPath = EditorGUILayout.TextField(setting.atlasPath); GUI.backgroundColor = cachedColor; if (GUILayout.Button("Browse", GUILayout.Width(60f))) { string t = EditorUtility.SaveFilePanelInProject("Atlas Folder", setting.atlasPath, "png", "", prev_atlas_folder); if (!string.IsNullOrEmpty(t)) { prev_atlas_folder = Path.GetDirectoryName(t).Replace('\\', '/'); setting.atlasPath = t; changed = true; } } EditorGUILayout.EndHorizontal(); //h4 EditorGUILayout.BeginHorizontal(GUILayout.MinHeight(10f)); //h4 EditorGUILayout.BeginVertical(); setting.unityPacking = GUILayout.Toggle(setting.unityPacking, " unity packing", GUILayout.Width(140f)); EditorGUI.BeginDisabledGroup(setting.unityPacking); setting.forceSquare = GUILayout.Toggle(setting.forceSquare, " force square atlas", GUILayout.Width(140f)); EditorGUI.EndDisabledGroup(); setting.trimAlpha = GUILayout.Toggle(setting.trimAlpha, " trim alpha", GUILayout.Width(140f)); EditorGUILayout.EndVertical(); GUILayout.FlexibleSpace(); GUILayout.FlexibleSpace(); EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); //h5 EditorGUILayout.LabelField("Padding", GUILayout.Width(56f)); cachedColor = GUI.backgroundColor; GUI.backgroundColor = setting.padding < 0 ? Color.red : cachedColor; setting.padding = EditorGUILayout.IntField(setting.padding, GUILayout.Width(64f)); GUI.backgroundColor = cachedColor; EditorGUILayout.EndHorizontal(); //h5 EditorGUILayout.BeginHorizontal(); //h5 EditorGUILayout.LabelField("Max Size", GUILayout.Width(56f)); cachedColor = GUI.backgroundColor; GUI.backgroundColor = setting.maxSize < 32 || ((setting.maxSize - 1) & setting.maxSize) != 0 ? Color.red : cachedColor; setting.maxSize = EditorGUILayout.IntField(setting.maxSize, GUILayout.Width(64f)); GUI.backgroundColor = cachedColor; EditorGUILayout.EndHorizontal(); //h5 EditorGUILayout.EndVertical(); GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); //h4 GUILayout.Space(2f); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); //h3 if (EditorGUI.EndChangeCheck()) { changed = true; } GUILayout.Space(2f); EditorGUILayout.EndHorizontal(); //h2 } EditorGUILayout.EndFadeGroup(); EditorGUILayout.EndVertical(); if (changed) { isDirty = true; } } EditorGUILayout.EndVertical(); GUILayout.Space(2f); EditorGUILayout.EndHorizontal(); GUILayout.Space(2f); cachedColor = GUI.backgroundColor; GUI.backgroundColor = Color.green; if (GUILayout.Button("Add Atlas")) { insertAt = mSettings.Count; } GUI.backgroundColor = cachedColor; if (insertAt >= 0) { AtlasSetting setting = new AtlasSetting(); setting.texturesFolder = ""; setting.atlasPath = ""; setting.padding = default_padding; setting.maxSize = default_max_size; setting.unityPacking = default_unity_packing; setting.forceSquare = default_force_square; setting.trimAlpha = default_trim_alpha; mSettings.Insert(insertAt, setting); isDirty = true; } if (removeAt >= 0) { mSettings.RemoveAt(removeAt); isDirty = true; } EditorGUILayout.EndScrollView(); if (isDirty) { SaveAtlasConfig(mSettings); } Color cacheBgColor = GUI.backgroundColor; GUI.backgroundColor = Color.green; if (GUILayout.Button("Pack All Atlas", GUILayout.Height(28f))) { for (int i = 0, imax = mSettings.Count; i < imax; i++) { AtlasSetting setting = mSettings[i]; Pack(true, setting.texturesFolder, setting.atlasPath, setting.padding, setting.maxSize, setting.trimAlpha, setting.unityPacking, setting.forceSquare); } } GUI.backgroundColor = cacheBgColor; }
private static void PackSingleAtlas(AtlasSetting setting) { Pack(false, setting.texturesFolder, setting.atlasPath, setting.padding, setting.maxSize, setting.trimAlpha, setting.unityPacking, setting.forceSquare); }