카테고리 없음

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로 바꿨다.