// AtlasEditorWindow.cs using AlicizaX.Editor; using AlicizaX.Editor.Extension; using UnityEditor; using UnityEngine; public class AtlasEditorWindow : EditorWindow { private const string AtlasProcessorKey = "AtlasProcessorKey"; private AtlasConfiguration config; private Vector2 scrollPos; private bool useAtlas = false; [EditorToolFunction("图集工具")] public static void ShowWindow() { GetWindow("图集打包"); } private void OnEnable() { LoadOrCreateConfig(); useAtlas = ScriptingDefineSymbols.HasScriptingDefineSymbol(BuildTargetGroup.Standalone, AtlasProcessorKey); } private void LoadOrCreateConfig() { config = AtlasConfiguration.instance; } private void OnGUI() { if (config == null) return; scrollPos = EditorGUILayout.BeginScrollView(scrollPos); EditorGUILayout.Space(); EditorGUILayout.LabelField("Atlas Configuration", EditorStyles.boldLabel); var useAtlasToggle = EditorGUILayout.Toggle("Enable", useAtlas); if (useAtlasToggle != useAtlas) { if (useAtlas) { ScriptingDefineSymbols.AddScriptingDefineSymbol(AtlasProcessorKey); } else { ScriptingDefineSymbols.RemoveScriptingDefineSymbol(AtlasProcessorKey); } } DrawConfigurationGUI(); EditorGUILayout.EndScrollView(); } private void DrawConfigurationGUI() { EditorGUI.BeginChangeCheck(); EditorGUILayout.Space(); EditorGUILayout.LabelField("Paths", EditorStyles.boldLabel); config.atlasOutputPath = EditorGUILayout.TextField("Atlas Output", config.atlasOutputPath); config.rawUIPath = EditorGUILayout.TextField("Raw UI Path", config.rawUIPath); config.uiAtlasPath = EditorGUILayout.TextField("UI Atlas Path", config.uiAtlasPath); EditorGUILayout.Space(); EditorGUILayout.LabelField("Texture Settings", EditorStyles.boldLabel); config.androidFormat = (TextureImporterFormat)EditorGUILayout.EnumPopup("Android Format", config.androidFormat); config.iosFormat = (TextureImporterFormat)EditorGUILayout.EnumPopup("iOS Format", config.iosFormat); config.webglFormat = (TextureImporterFormat)EditorGUILayout.EnumPopup("WebGL Format", config.webglFormat); config.compressionQuality = EditorGUILayout.IntSlider("Compression Quality", config.compressionQuality, 0, 100); EditorGUILayout.Space(); EditorGUILayout.LabelField("Packing Settings", EditorStyles.boldLabel); config.padding = EditorGUILayout.IntField("Padding", config.padding); config.enableRotation = EditorGUILayout.Toggle("Enable Rotation", config.enableRotation); config.blockOffset = EditorGUILayout.IntField("Block Offset", config.blockOffset); if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(config); } EditorGUILayout.Space(); if (GUILayout.Button("Force Rebuild All Atlases", GUILayout.Height(30))) { AtlasProcessor.ForceRebuildAtlases(config); } } }