카테고리 없음
unity Sprite의 이름을 editor에서 코드로 변경하기
Eody
2025. 6. 10. 20:08
public void RenameSprites(string folder_name, string sprite_name)
{
string path = folder_name; // 원하는 폴더
string[] guids = AssetDatabase.FindAssets("t:Texture2D", new[] { path });
foreach (string guid in guids)
{
string assetPath = AssetDatabase.GUIDToAssetPath(guid);
TextureImporter importer = AssetImporter.GetAtPath(assetPath) as TextureImporter;
if (importer != null && importer.textureType == TextureImporterType.Sprite)
{
if (importer.spriteImportMode == SpriteImportMode.Multiple)
{
SpriteMetaData[] sprites = importer.spritesheet;
string fileName = System.IO.Path.GetFileNameWithoutExtension(assetPath);
for (int i = 0; i < sprites.Length; i++)
{
if (sprites[i].name == sprite_name)
{
sprites[i].name = fileName + "_i";
}
}
importer.spritesheet = sprites;
EditorUtility.SetDirty(importer);
importer.SaveAndReimport();
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Debug.Log($"Updated sprite names in: {assetPath}");
}
}
}
}
틀렸다 이리 저장하면 spriteID가 0이된다.
importer.spritesheet를 더이상 사용하면 안된다
대신
SpriteMetaData[] sprites = importer.spritesheet;
string fileName = System.IO.Path.GetFileNameWithoutExtension(assetPath);
var factory = new SpriteDataProviderFactories();
factory.Init();
var dataProvider = factory.GetSpriteEditorDataProviderFromObject(importer);
dataProvider.InitSpriteEditorDataProvider();
var spriteRects = dataProvider.GetSpriteRects();//if you don't have the initial sprite rects, just create them manually, this example just changes the pivot points
foreach (var v in spriteRects)
{
if (v.name == "Idle_0")
{
v.name = "a";
}
}
dataProvider.SetSpriteRects(spriteRects);
dataProvider.Apply();
EditorUtility.SetDirty(importer);
importer.SaveAndReimport();
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
이렇게 UnityEditor.U2D.Sprites.ISpriteEditorDataProvider 를 사용해야한다. 나는 Idle_0을 a로 바꿨다.