using UnityEngine;
using UnityEditor;
public class BatchSetPivot : EditorWindow
{
[MenuItem("Tools/Batch Set Sprite Pivot to Center Bottom")]
public static void ShowWindow()
{
GetWindow<BatchSetPivot>("Batch Pivot Setter");
}
private void OnGUI()
{
GUILayout.Label("Set Pivot for Multiple Sprites", EditorStyles.boldLabel);
if (GUILayout.Button("Set Pivot to Center Bottom"))
{
SetPivotCenterBottom();
}
}
private void SetPivotCenterBottom()
{
// 선택된 모든 Texture2D 에셋 가져오기
Object[] selectedTextures = Selection.GetFiltered<Texture2D>(SelectionMode.Assets);
if (selectedTextures.Length == 0)
{
EditorUtility.DisplayDialog("경고", "먼저 하나 이상의 Texture2D 에셋을 선택하세요.", "확인");
return;
}
int successCount = 0;
int failCount = 0;
foreach (Texture2D texture in selectedTextures)
{
string assetPath = AssetDatabase.GetAssetPath(texture);
TextureImporter importer = AssetImporter.GetAtPath(assetPath) as TextureImporter;
if (importer == null)
{
Debug.LogWarning($"'{texture.name}'은/는 TextureImporter를 찾을 수 없습니다.");
failCount++;
continue;
}
if (importer.spriteImportMode != SpriteImportMode.Multiple)
{
Debug.LogWarning($"'{texture.name}'은/는 Multiple 스프라이트 모드가 아닙니다.");
failCount++;
continue;
}
SpriteMetaData[] metaData = importer.spritesheet;
if (metaData == null || metaData.Length == 0)
{
Debug.LogWarning($"'{texture.name}'에 스프라이트 데이터가 없습니다.");
failCount++;
continue;
}
bool isModified = false;
for (int i = 0; i < metaData.Length; i++)
{
Vector2 currentPivot = metaData[i].pivot;
// 피벗이 Center Bottom이 아닌 경우에만 수정
if (metaData[i].alignment != (int)SpriteAlignment.Custom ||
Mathf.Abs(currentPivot.x - 0.5f) > 0.001f ||
Mathf.Abs(currentPivot.y - 0f) > 0.001f)
{
metaData[i].alignment = (int)SpriteAlignment.Custom;
metaData[i].pivot = new Vector2(0.5f, 0f); // Center Bottom
isModified = true;
Debug.Log($"'{texture.name}'의 스프라이트 '{metaData[i].name}' 피벗을 Center Bottom으로 변경.");
}
else
{
Debug.Log($"'{texture.name}'의 스프라이트 '{metaData[i].name}' 피벗이 이미 Center Bottom입니다.");
}
}
if (isModified)
{
importer.spritesheet = metaData;
EditorUtility.SetDirty(importer);
AssetDatabase.ImportAsset(assetPath, ImportAssetOptions.ForceUpdate);
successCount++;
Debug.Log($"'{texture.name}'의 피벗을 Center Bottom으로 성공적으로 변경했습니다.");
}
else
{
Debug.Log($"'{texture.name}'의 모든 스프라이트가 이미 Center Bottom으로 설정되어 있습니다.");
}
}
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
EditorUtility.DisplayDialog("완료",
$"피벗 설정 완료:\n성공: {successCount}\n실패: {failCount}",
"확인");
}
}
카테고리 없음