【Unityプラグイン】アセットを一括で名前変更(リネーム)するツール

Unity

今回はUnityに登録しているデータを一括で名前を変更したいことがあったのでファイル名を一括変更できるプラグインを作成してみました。

同じように数十個、数百個のファイルのリネームに苦労している人の助けになれば幸いです。

プラグインについて

本プラグインを使うと面倒なアセット名の変更を一括で行うことができます。
私もアセットを大量の名前を変更する必要があったので実験的に作成してみました。

データが大量にある場合に便利だと思われます

 

更新履歴

  • 2022/07/11
    公開
  • 2022/07/28
    「フォルダ開く」を位置を変更
    検索結果を表示、検索結果から置き換え処理に変更

 

ダウンロード

ダウンロードはこちら
[Unity]ファイル名一括変換プラグイン

 

インストール方法

unitypackageのインストール方法はこちらです。

 

 

ソースコード

ちなみにソースコードはこんな感じです。

TedLab_ReplaceFileNameEditor.cs

using UnityEngine;
using UnityEditor;
using System.IO;
using System.Collections.Generic;

namespace TedLab
{
    public class ReplaceFileNameWindow : EditorWindow
    {
        [MenuItem("TedLab/ファイル名を一括置き換え")]
        static void OpenWindow()
        {
            GetWindow(true, "[TedLab]ファイル名を一括置き換え");
        }

        static readonly string KeyPrefix = "TedLab_ReplaceFileName_";
        static readonly string PathKey = KeyPrefix + "Path";
        static readonly string ReplaceTextKey = KeyPrefix + "ReplaceText";

        string _targetPath = "";
        string _matchText = "";
        string _replaceText = "";

        private Vector2 _scrollPosition = Vector2.zero;
        private List _foundPath = new List();

        private void OnEnable()
        {
            _targetPath = EditorPrefs.GetString( PathKey, "");
            _replaceText = EditorPrefs.GetString( ReplaceTextKey, "");
        }

        private void OnDisable()
        {
            EditorPrefs.SetString( PathKey, _targetPath );
            EditorPrefs.SetString( ReplaceTextKey, _replaceText );
        }

        void OnGUI()
        {
            GUILayout.Label("対象フォルダ:");
            _targetPath = GUILayout.TextField(_targetPath);
            
            if (GUILayout.Button("フォルダを開く"))
            {
                string filePath = _targetPath;
                filePath = filePath.Replace( '/', Path.DirectorySeparatorChar );
                EditorUtility.RevealInFinder(filePath);
            }

            GUILayout.Label("検索する文字列:");
            _matchText = GUILayout.TextField(_matchText);

            GUILayout.Label("置き換え文字列:");
            _replaceText = GUILayout.TextField(_replaceText);


            if (GUILayout.Button("検索")){
                FindAssets();
            }
            if (GUILayout.Button("検索結果で一括置き換え")) {
                ReplaceText();
                FindAssets();
            }

            {
                EditorGUILayout.PrefixLabel("検索結果");
                _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition);
                foreach(var path in _foundPath){
                    EditorGUILayout.LabelField(path);
                }
                EditorGUILayout.EndScrollView();
            }
        }

        private void FindAssets()
        {
            var guids = AssetDatabase.FindAssets(_matchText, new[] {_targetPath});
            if(guids.Length <= 0){
                _foundPath.Clear();
                return;
            }
            _foundPath = new List(guids.Length);
            foreach(var guid in guids)
            {
                var path = AssetDatabase.GUIDToAssetPath(guid);
                _foundPath.Add(path);
            }
        }

        void ReplaceText()
        {
            foreach(var path in _foundPath)
            {
                var fileName = Path.GetFileName(path);
                var newfileName = fileName.Replace(_matchText, _replaceText);
                AssetDatabase.RenameAsset(path, newfileName);
            }
        }
    }

} // namespace TedLab

 

利用の流れ

おおまかな使い方としては

  1. 本プラグイン(スクリプト)をプロジェクトに追加する
  2. メニューにある「TedLab→ファイル名を一括置き換え」を選択
  3. 専用ウィンドウが開く
  4. 対象となるフォルダへのパスを設定
  5. 検索するファイル名の文字列、置き換える文字列を設定
  6. 置き換えボタンを押して実行

となります。

長くなりましたが基本的にはテキストエディタなどで
検索して置換するときと同じような感じです

 

使用方法

まずはプロジェクトにスクリプトを追加してください。

プロジェクトにドラッグ&ドロップするだけでOKです

追加できたら「メニュー→TedLab→ファイル名を一括置き換え」を選択します。
すると下記のようなウィンドウが表示されるので順次設定していきます。

 

設定方法

具体的な設定項目は下記となります。

対象フォルダ・・・対象となるファイルがあるフォルダを指定
検索する文字列・・・指定フォルダ内で対象となるアセットをこの文字列から探す
置き換え文字列・・・検索文字列をこの文字列で置き換えるための名前
上記を設定して「一括で置き換えるボタン」を押すとファイルが変換されます。

実際に置き換えてみる

そして私の場合は「LocalizeTextTable_」が頭についたアセットがたくさんあって
その文字列を消したかったので「置き換える文字列」に空文字(何も入力しない)を指定しました。
そして実行すると

ドキドキ…

下記のように変換されました。

何十個もあったファイルの名前が変わりました!

こりゃ便利。

 

活動内容のPR

下記が本サイトでの活動内容となります。

最新のゲーム開発動画を確認する

 

最後に

いかがでしたでしょうか。

これまでは大した量でもないので手作業でリネームなどしていましたが
今後は大量のデータでも問題なく作業できそうです。

シンプルなのにとても便利。
今後も重宝しそうな予感MAXです!

では本記事はここで終わりたいと思います。
このプラグインが無用な作業を減らせる助けとなれば幸いです。
この度はここまでお読みいいただきありがとうございました。

 

検索結果を表示してから置き換えるように変更  2022/07/28

これまでは置き換えボタンを押すと有無を言わさず置き換えていましたが
安全のため検索結果を表示してから置き換えるように修正しました。

使い方は今まで基本的に同じで「検索ボタン」を押してから

「置き換えボタン」を押すだけです!

 

 

コメント

スポンサーリンク
タイトルとURLをコピーしました