コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】指定したフォルダ内のアセットのファイル名を一括でリネームするエディタ拡張

スクリプト

using System;
using System.IO;
using System.Linq;
using UnityEditor;

public static class AssetRenamer
{
    public static void Rename
    (
        string               directoryName,
        Func<string, string> onReplace
    )
    {
        if ( !directoryName.EndsWith( "/" ) )
        {
            directoryName += "/";
        }

        var assetPaths = AssetDatabase
                .GetAllAssetPaths()
                .Where( x => x.StartsWith( directoryName ) )
                .ToArray()
            ;

        AssetDatabase.StartAssetEditing();

        try
        {
            foreach ( var assetPath in assetPaths )
            {
                AssetDatabase.RenameAsset( assetPath, onReplace( Path.GetFileNameWithoutExtension( assetPath ) ) );
            }
        }
        finally
        {
            AssetDatabase.StopAssetEditing();
            AssetDatabase.Refresh();
        }
    }
}

使用例

[MenuItem( "hoge/hoge" )]
private static void Hoge()
{
    AssetRenamer.Rename( "Assets", x => x.Replace( "-", "_" ) );
}