mirror of
https://github.com/maxartz15/MA_TextureAtlasser.git
synced 2025-07-07 08:46:07 +02:00
Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
82efcbb6d0 | |||
7f5e22b3c1 | |||
c91c1cb7ee |
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2018 Max
|
Copyright (c) 2018 Max Kruf
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
BIN
MA_ToolBox/MA_TextureAtlasserPro/Icons/duplicateQuadIcon.png
Normal file
BIN
MA_ToolBox/MA_TextureAtlasserPro/Icons/duplicateQuadIcon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
@ -0,0 +1,25 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEditor;
|
||||||
|
using MA_Editor;
|
||||||
|
|
||||||
|
namespace MA_TextureAtlasserPro
|
||||||
|
{
|
||||||
|
[System.Serializable]
|
||||||
|
public class MA_TextureAtlasserProSettings : ScriptableObject
|
||||||
|
{
|
||||||
|
[Header("Selection")]
|
||||||
|
public bool autoFocus = true;
|
||||||
|
|
||||||
|
[Header("Duplication:")]
|
||||||
|
public bool copySelectedQuadData = false;
|
||||||
|
public string duplicatedQuadNamePrefix = "new ";
|
||||||
|
|
||||||
|
[Header("Hotkeys:")]
|
||||||
|
public bool useHotkeys = false;
|
||||||
|
public KeyCode addQuadHotKey = KeyCode.Q;
|
||||||
|
public KeyCode removeQuadHotKey = KeyCode.R;
|
||||||
|
public KeyCode duplicateHotKey = KeyCode.D;
|
||||||
|
}
|
||||||
|
}
|
@ -12,6 +12,7 @@ namespace MA_TextureAtlasserPro
|
|||||||
public static GUIContent exportAtlasIcon;
|
public static GUIContent exportAtlasIcon;
|
||||||
public static GUIContent createQuadIcon;
|
public static GUIContent createQuadIcon;
|
||||||
public static GUIContent removeQuadIcon;
|
public static GUIContent removeQuadIcon;
|
||||||
|
public static GUIContent duplicateQuadIcon;
|
||||||
public static GUIContent showTexturesOnIcon;
|
public static GUIContent showTexturesOnIcon;
|
||||||
public static GUIContent showTexturesOffIcon;
|
public static GUIContent showTexturesOffIcon;
|
||||||
public static GUIContent dragHandleIcon;
|
public static GUIContent dragHandleIcon;
|
||||||
@ -24,6 +25,7 @@ namespace MA_TextureAtlasserPro
|
|||||||
exportAtlasIcon = new GUIContent("", (Texture)EditorGUIUtility.Load(LOADICONPATH + "exportAtlasIcon" + ".png"));
|
exportAtlasIcon = new GUIContent("", (Texture)EditorGUIUtility.Load(LOADICONPATH + "exportAtlasIcon" + ".png"));
|
||||||
createQuadIcon = new GUIContent("", (Texture)EditorGUIUtility.Load(LOADICONPATH + "createQuadIcon" + ".png"));
|
createQuadIcon = new GUIContent("", (Texture)EditorGUIUtility.Load(LOADICONPATH + "createQuadIcon" + ".png"));
|
||||||
removeQuadIcon = new GUIContent("", (Texture)EditorGUIUtility.Load(LOADICONPATH + "removeQuadIcon" + ".png"));
|
removeQuadIcon = new GUIContent("", (Texture)EditorGUIUtility.Load(LOADICONPATH + "removeQuadIcon" + ".png"));
|
||||||
|
duplicateQuadIcon = new GUIContent("", (Texture)EditorGUIUtility.Load(LOADICONPATH + "duplicateQuadIcon" + ".png"));
|
||||||
showTexturesOnIcon = new GUIContent("", (Texture)EditorGUIUtility.Load(LOADICONPATH + "showTexturesOnIcon" + ".png"));
|
showTexturesOnIcon = new GUIContent("", (Texture)EditorGUIUtility.Load(LOADICONPATH + "showTexturesOnIcon" + ".png"));
|
||||||
showTexturesOffIcon = new GUIContent("", (Texture)EditorGUIUtility.Load(LOADICONPATH + "showTexturesOffIcon" + ".png"));
|
showTexturesOffIcon = new GUIContent("", (Texture)EditorGUIUtility.Load(LOADICONPATH + "showTexturesOffIcon" + ".png"));
|
||||||
dragHandleIcon = new GUIContent("", (Texture)EditorGUIUtility.Load(LOADICONPATH + "dragHandleIcon" + ".png"));
|
dragHandleIcon = new GUIContent("", (Texture)EditorGUIUtility.Load(LOADICONPATH + "dragHandleIcon" + ".png"));
|
||||||
|
@ -9,12 +9,43 @@ namespace MA_TextureAtlasserPro
|
|||||||
{
|
{
|
||||||
public static class MA_TextureAtlasserProUtils
|
public static class MA_TextureAtlasserProUtils
|
||||||
{
|
{
|
||||||
|
public const string SETTINGSASSETPATH = "Assets/MA_ToolBox/MA_TextureAtlasserPro/Settings/";
|
||||||
public const string SAVEASSETPATH = "Assets/MA_ToolBox/MA_TextureAtlasserPro/Atlasses/";
|
public const string SAVEASSETPATH = "Assets/MA_ToolBox/MA_TextureAtlasserPro/Atlasses/";
|
||||||
public const string LOADASSETPATH = "Assets/MA_ToolBox/MA_TextureAtlasserPro/Atlasses/";
|
public const string LOADASSETPATH = "Assets/MA_ToolBox/MA_TextureAtlasserPro/Atlasses/";
|
||||||
public const string EXPORTASSETPATH = "Assets/MA_ToolBox/MA_TextureAtlasserPro/Exports/";
|
public const string EXPORTASSETPATH = "Assets/MA_ToolBox/MA_TextureAtlasserPro/Exports/";
|
||||||
public const float VIEWOFFSET = 20;
|
public const float VIEWOFFSET = 20;
|
||||||
public const string DEFAULTTEXTUREGROUPNAME = "Albedo";
|
public const string DEFAULTTEXTUREGROUPNAME = "Albedo";
|
||||||
|
|
||||||
|
public static MA_TextureAtlasserProSettings CreateSettings()
|
||||||
|
{
|
||||||
|
MA_TextureAtlasserProSettings _settings = (MA_TextureAtlasserProSettings)ScriptableObject.CreateInstance<MA_TextureAtlasserProSettings>();
|
||||||
|
|
||||||
|
if(_settings != null)
|
||||||
|
{
|
||||||
|
AssetDatabase.CreateAsset(_settings, SETTINGSASSETPATH + "MA_TextureAtlasserProSettings.asset");
|
||||||
|
AssetDatabase.SaveAssets();
|
||||||
|
AssetDatabase.Refresh();
|
||||||
|
|
||||||
|
return _settings;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MA_TextureAtlasserProSettings LoadSettings()
|
||||||
|
{
|
||||||
|
MA_TextureAtlasserProSettings _settings = AssetDatabase.LoadAssetAtPath(SETTINGSASSETPATH + "MA_TextureAtlasserProSettings.asset", typeof(MA_TextureAtlasserProSettings)) as MA_TextureAtlasserProSettings;
|
||||||
|
|
||||||
|
if (_settings == null)
|
||||||
|
{
|
||||||
|
_settings = CreateSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _settings;
|
||||||
|
}
|
||||||
|
|
||||||
public static MA_TextureAtlasserProAtlas CreateTextureAtlas(string name, Vector2 size)
|
public static MA_TextureAtlasserProAtlas CreateTextureAtlas(string name, Vector2 size)
|
||||||
{
|
{
|
||||||
MA_TextureAtlasserProAtlas _atlas = (MA_TextureAtlasserProAtlas)ScriptableObject.CreateInstance<MA_TextureAtlasserProAtlas>();
|
MA_TextureAtlasserProAtlas _atlas = (MA_TextureAtlasserProAtlas)ScriptableObject.CreateInstance<MA_TextureAtlasserProAtlas>();
|
||||||
@ -113,7 +144,7 @@ namespace MA_TextureAtlasserPro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CreateTextureQuad(MA_TextureAtlasserProAtlas atlas, string name, Rect rect)
|
public static void CreateTextureQuad(MA_TextureAtlasserProAtlas atlas, string name, Rect rect, bool focus = true)
|
||||||
{
|
{
|
||||||
if(atlas != null)
|
if(atlas != null)
|
||||||
{
|
{
|
||||||
@ -140,6 +171,11 @@ namespace MA_TextureAtlasserPro
|
|||||||
AssetDatabase.AddObjectToAsset(_quad, atlas);
|
AssetDatabase.AddObjectToAsset(_quad, atlas);
|
||||||
AssetDatabase.SaveAssets();
|
AssetDatabase.SaveAssets();
|
||||||
AssetDatabase.Refresh();
|
AssetDatabase.Refresh();
|
||||||
|
|
||||||
|
if(focus)
|
||||||
|
{
|
||||||
|
atlas.selectedTextureQuad = atlas.textureQuads[atlas.textureQuads.Count - 1];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -152,14 +188,41 @@ namespace MA_TextureAtlasserPro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void RemoveTextureQuad(MA_TextureAtlasserProAtlas atlas)
|
public static void RemoveTextureQuad(MA_TextureAtlasserProAtlas atlas, bool focus = true)
|
||||||
{
|
{
|
||||||
if(atlas != null && atlas.selectedTextureQuad != null)
|
if(atlas != null && atlas.selectedTextureQuad != null)
|
||||||
{
|
{
|
||||||
atlas.textureQuads.Remove(atlas.selectedTextureQuad);
|
int _index = atlas.textureQuads.IndexOf(atlas.selectedTextureQuad);
|
||||||
|
|
||||||
|
atlas.textureQuads.RemoveAt(_index);
|
||||||
GameObject.DestroyImmediate(atlas.selectedTextureQuad, true);
|
GameObject.DestroyImmediate(atlas.selectedTextureQuad, true);
|
||||||
AssetDatabase.SaveAssets();
|
AssetDatabase.SaveAssets();
|
||||||
AssetDatabase.Refresh();
|
AssetDatabase.Refresh();
|
||||||
|
|
||||||
|
if (focus && atlas.textureQuads.Count > 0)
|
||||||
|
{
|
||||||
|
_index = Mathf.Clamp(_index, 0, atlas.textureQuads.Count - 1);
|
||||||
|
atlas.selectedTextureQuad = atlas.textureQuads[_index];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DuplicateTextureQuad(MA_TextureAtlasserProAtlas atlas, bool focus = true, bool copyData = false, string namePrefix = "new ")
|
||||||
|
{
|
||||||
|
if(atlas != null && atlas.selectedTextureQuad != null)
|
||||||
|
{
|
||||||
|
CreateTextureQuad(atlas, namePrefix + atlas.selectedTextureQuad.name, atlas.selectedTextureQuad.rect);
|
||||||
|
|
||||||
|
if(copyData)
|
||||||
|
{
|
||||||
|
atlas.textureQuads[atlas.textureQuads.Count - 1].meshes = atlas.selectedTextureQuad.meshes;
|
||||||
|
atlas.textureQuads[atlas.textureQuads.Count - 1].textureGroups = atlas.selectedTextureQuad.textureGroups;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(focus)
|
||||||
|
{
|
||||||
|
atlas.selectedTextureQuad = atlas.textureQuads[atlas.textureQuads.Count - 1];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,12 +52,17 @@ namespace MA_TextureAtlasserPro
|
|||||||
GUILayout.Space(MA_TextureAtlasserProUtils.VIEWOFFSET);
|
GUILayout.Space(MA_TextureAtlasserProUtils.VIEWOFFSET);
|
||||||
if(GUILayout.Button(MA_TextureAtlasserProIcons.createQuadIcon, GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(true)))
|
if(GUILayout.Button(MA_TextureAtlasserProIcons.createQuadIcon, GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(true)))
|
||||||
{
|
{
|
||||||
MA_TextureAtlasserProUtils.CreateTextureQuad(curWindow.textureAtlas, "new Quad", new Rect(0, 0, 128, 128));
|
MA_TextureAtlasserProUtils.CreateTextureQuad(curWindow.textureAtlas, "new Quad", new Rect(0, 0, 128, 128), curWindow.settings.autoFocus);
|
||||||
}
|
}
|
||||||
if(curWindow.textureAtlas.selectedTextureQuad != null && GUILayout.Button(MA_TextureAtlasserProIcons.removeQuadIcon, GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(true)))
|
if(curWindow.textureAtlas.selectedTextureQuad != null && GUILayout.Button(MA_TextureAtlasserProIcons.removeQuadIcon, GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(true)))
|
||||||
{
|
{
|
||||||
if(curWindow.textureAtlas.selectedTextureQuad != null)
|
if(curWindow.textureAtlas.selectedTextureQuad != null)
|
||||||
MA_TextureAtlasserProUtils.RemoveTextureQuad(curWindow.textureAtlas);
|
MA_TextureAtlasserProUtils.RemoveTextureQuad(curWindow.textureAtlas, curWindow.settings.autoFocus);
|
||||||
|
}
|
||||||
|
if (curWindow.textureAtlas.selectedTextureQuad != null && GUILayout.Button(MA_TextureAtlasserProIcons.duplicateQuadIcon, GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(true)))
|
||||||
|
{
|
||||||
|
if (curWindow.textureAtlas.selectedTextureQuad != null)
|
||||||
|
MA_TextureAtlasserProUtils.DuplicateTextureQuad(curWindow.textureAtlas, curWindow.settings.autoFocus, curWindow.settings.copySelectedQuadData, curWindow.settings.duplicatedQuadNamePrefix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,6 +89,31 @@ namespace MA_TextureAtlasserPro
|
|||||||
|
|
||||||
e.Use();
|
e.Use();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Hotkeys.
|
||||||
|
if (curWindow.settings.useHotkeys)
|
||||||
|
{
|
||||||
|
if (e.type == EventType.KeyDown && e.keyCode == curWindow.settings.addQuadHotKey)
|
||||||
|
{
|
||||||
|
MA_TextureAtlasserProUtils.CreateTextureQuad(curWindow.textureAtlas, "new Quad", new Rect(0, 0, 128, 128), curWindow.settings.autoFocus);
|
||||||
|
e.Use();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (curWindow.textureAtlas.selectedTextureQuad != null)
|
||||||
|
{
|
||||||
|
if (e.type == EventType.KeyDown && e.keyCode == curWindow.settings.removeQuadHotKey)
|
||||||
|
{
|
||||||
|
MA_TextureAtlasserProUtils.RemoveTextureQuad(curWindow.textureAtlas, curWindow.settings.autoFocus);
|
||||||
|
e.Use();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.type == EventType.KeyDown && e.keyCode == curWindow.settings.duplicateHotKey)
|
||||||
|
{
|
||||||
|
MA_TextureAtlasserProUtils.DuplicateTextureQuad(curWindow.textureAtlas, curWindow.settings.autoFocus);
|
||||||
|
e.Use();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Vector2 ConvertScreenCoordsToZoomCoords(Vector2 screenCoords)
|
private Vector2 ConvertScreenCoordsToZoomCoords(Vector2 screenCoords)
|
||||||
|
@ -8,6 +8,7 @@ namespace MA_TextureAtlasserPro
|
|||||||
public class MA_TextureAtlasserProWindow : EditorWindow
|
public class MA_TextureAtlasserProWindow : EditorWindow
|
||||||
{
|
{
|
||||||
public static MA_TextureAtlasserProWindow thisWindow;
|
public static MA_TextureAtlasserProWindow thisWindow;
|
||||||
|
public MA_TextureAtlasserProSettings settings;
|
||||||
public MA_TextureAtlasserProAtlas textureAtlas;
|
public MA_TextureAtlasserProAtlas textureAtlas;
|
||||||
|
|
||||||
public MA_TextureAtlasserProWorkView workView;
|
public MA_TextureAtlasserProWorkView workView;
|
||||||
@ -56,6 +57,7 @@ namespace MA_TextureAtlasserPro
|
|||||||
GetCurrentWindow();
|
GetCurrentWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
thisWindow.settings = MA_TextureAtlasserProUtils.LoadSettings();
|
||||||
thisWindow.workView = new MA_TextureAtlasserProWorkView(thisWindow, "workView");
|
thisWindow.workView = new MA_TextureAtlasserProWorkView(thisWindow, "workView");
|
||||||
thisWindow.menuView = new MA_TextureAtlasserProMenuView(thisWindow, "menuView");
|
thisWindow.menuView = new MA_TextureAtlasserProMenuView(thisWindow, "menuView");
|
||||||
thisWindow.inspectorView = new MA_TextureAtlasserProInspectorView(thisWindow, "inspectorView");
|
thisWindow.inspectorView = new MA_TextureAtlasserProInspectorView(thisWindow, "inspectorView");
|
||||||
@ -86,7 +88,7 @@ namespace MA_TextureAtlasserPro
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Check views
|
//Check views
|
||||||
if(workView == null || menuView == null || inspectorView == null || debugView == null)
|
if(settings == null || workView == null || menuView == null || inspectorView == null || debugView == null)
|
||||||
{
|
{
|
||||||
CreateViews();
|
CreateViews();
|
||||||
return;
|
return;
|
||||||
|
1
MA_ToolBox/MA_TextureAtlasserPro/Settings/Settings.txt
Normal file
1
MA_ToolBox/MA_TextureAtlasserPro/Settings/Settings.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Settigns are supposed to be here.
|
@ -6,4 +6,6 @@ By having full control over the size and position of the textures that are being
|
|||||||
|
|
||||||
https://youtu.be/PBRKlopkZP0
|
https://youtu.be/PBRKlopkZP0
|
||||||
|
|
||||||
|
Download the UnityPackage here: https://github.com/maxartz15/MA_TextureAtlasser/releases
|
||||||
|
|
||||||
For more information: https://maxartz15.com/ma_textureatlas/
|
For more information: https://maxartz15.com/ma_textureatlas/
|
||||||
|
Reference in New Issue
Block a user