見出し画像

【Unity】アセットファイルを効率よくリネームする方法

Unityでヒエラルキー上のGameObjectを効率よくリネームするには以下のようなツールを使います。

じゃあプロジェクトフォルダーにあるアセットファイルを、同じように効率よくリネームする方法はないかと思い、探してみましたが、見つかりませんでした。

なので、「Flexible Renamer」でエクスプローラー上のアセットファイルの名前を強引に変えてしまいます。

Room06をRoom07に一括で置換している図

これでリネームが効率よくできました~。
一見落着、思ってたのですが、無理やりUnity外からリネームしたためにAssetファイルを選択して「Fix object name」というボタンをクリックしないと、ファイルが使用できない状態になりました。

外から強引に名前を変えたなテメー

しかも、この「Fix objcet Name」はファイルを複数選択して、一括で適用するということができない…。
いちいちリネームしたアセットファイルを選択して、インスペクタ上の「Fix object name」をポチポチクリックするのは、あまりに効率が悪いです。これならUnity上でリネームしたほうが効率がいいかもしれないです。

なので、一括でプロジェクト全体の「Fix object name」を適用するエディタ拡張をChatGPTに作ってもらいました。
以下がコードです。

using UnityEditor;
using UnityEngine;

public class BatchRenameAssets : EditorWindow
{
    [MenuItem("Tools/Batch Rename Assets")]
    static void RenameAllAssets()
    {
        string[] guids = AssetDatabase.FindAssets("t:Object");

        foreach (string guid in guids)
        {
            string path = AssetDatabase.GUIDToAssetPath(guid);
            Object asset = AssetDatabase.LoadMainAssetAtPath(path);
            string newName = System.IO.Path.GetFileNameWithoutExtension(path);

            if (asset != null && asset.name != newName)
            {
                Debug.Log($"Renaming asset: {asset.name} to {newName}");
                asset.name = newName;
                EditorUtility.SetDirty(asset);
            }
        }

        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
        Debug.Log("All assets renamed.");
    }
}

使い方はAssetフォルダ直下のEditorフォルダ内に上記コードをぶち込みます。Editorフォルダがない場合は作ってください。

エディタ拡張を使ったことがない人は、これを機にいくつか入れてみましょう。

Unity上部のツール内に「Batch Rename Assets」があるので、クリックします。

これでプロジェクト全体のFix object nameが適用されます。
注意点として、プロジェクト全体に適用するため、多少時間がかかります。
また、そもそもの話ですが、Unity外でアセットをリネームした場合、ゲームオブジェクトにアタッチしているアセット類は外れてしまいます。

現在、脱出ゲームを作成中で、大量のフラグアセットを作成したため、このようなエディタ拡張をやってみました。
もし、この記事がお役に立てれば幸いです。

※このエディタ拡張の使用は、自己責任でお願いします。不具合が起きても責任は負いかねます。

この記事が気に入ったらサポートをしてみませんか?