com.alicizax.unity.editor.e.../Editor/Postprocessor/Atlas/AtlasEditorWindow.cs
2025-03-11 17:46:52 +08:00

96 lines
3.2 KiB
C#

// 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<AtlasEditorWindow>("图集打包");
}
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);
}
}
}