[Unity 확장] 등급 제도에서 선택한 대상을 정규 표현식으로 한꺼번에 이름을 바꾸는 도구를 만들어 봤습니다.

개시하다


등급 제도상의 대상을 수동으로 바꾸는 경우가 많다
"귀찮아!"
한 번은 "정규 표현식으로 이름을 바꿀 수 있다면 비교적 수월하지 않겠는가?"그런 생각이 들어서 빠르게 공구를 만들어 봤어요.

컨디션


Unity 5.5.0f3
Windows 10

제작에 관한 것


등급 제도에서 선택한 객체를 레지스트로 일괄적으로 이름을 바꾸는 편집 창을 만들어 보았습니다.

소스 코드


Unity 프로젝트에 Editor 폴더를 만들고 다음 스크립트를 Editor 폴더에 넣으십시오
HierarchyRegexRenamer.cs
namespace HierarchyRegexRenamer
{
    using UnityEngine;
    using UnityEditor;
    using System.Linq;
    using System.Text.RegularExpressions;

    public class HierarchyRegexRenamer : EditorWindow
    {
        [SerializeField] string pattern = ""; // Regexパターン
        [SerializeField] string replacement = ""; // 置換文字列

        // Hierarchy上で選択しているオブジェクトをリネームする
        void DoRename()
        {
            var gameObjects = Selection.gameObjects.Where(go => !AssetDatabase.IsMainAsset(go)).ToArray(); // リネーム対象のGameObject

            // Undoに登録
            Undo.RecordObjects(gameObjects, "Regex Rename");

            // 名前を変える
            foreach (var go in gameObjects)
            {
                go.name = Regex.Replace(go.name, this.pattern, this.replacement);
            }
        }

        // EditorWindowの描画処理
        void OnGUI()
        {
            EditorGUILayout.LabelField("Hierarchy上で選択しているオブジェクトをリネームします");
            GUILayout.Space(2f);

            this.pattern = EditorGUILayout.TextField("Regex", this.pattern);
            this.replacement = EditorGUILayout.TextField("Replacement", this.replacement);

            EditorGUI.BeginDisabledGroup(Selection.gameObjects.Length == 0);

            // ボタンを表示
            if (GUILayout.Button("リネーム"))
            {
                this.DoRename();
            }

            EditorGUI.EndDisabledGroup();
        }

        // ウィンドウを開く
        [MenuItem("EditorWindow/Hierarchy Regex Renamer")]
        static void Open()
        {
            GetWindow<HierarchyRegexRenamer>();
        }
    }
}

도구 사용


화면 상단 메뉴의 Editor Window/Hierrarchy Regex Renamer를 선택하면 창이 열립니다.

그런 다음 원하는 Regex 및 대체 문자열을 입력하고 이름 바꾸기 버튼을 누릅니다.

Regex의 샘플


나는 내가 이 쓸 수 있다고 생각하는 레지스트 모드를 몇 개 올려 보았다.

1. 반각 공간과 전각 공간 삭제

Regex = \s Replacement 에 지정된 항목 없음

2. ()로 묶은 반각 숫자는 ()로 지운다

Regex = \(\d+\) Replacement 에 지정된 항목 없음
게임 Object(2)의 경우 (2)는 사라지고 게임Object로 바뀐다.

3. (반각 숫자)의 () 부분만 삭제

Regex = \((\d+)\) Replacement = $1게임 Object(HOGE)(2)의 경우 (2)의 ()가 사라지고 게임 Object(HOGE)2가 된다.

4. 전체 이름을 ()로 묶는다


Regex = ^.*Replacement = ($0)$0 을 사용하면 Regex 문자열과 일치하는 정규 표현식 기능을 사용할 수 있습니다.

앞으로의 과제


정규 표현식만 실현하기 어려운 기능도 있다.예를 들어 다음과 같은 기능
• 선택한 객체 정렬
특별한 문자를 준비할 수 있다면 이름을 바꿀 때 번호를 바꾸는 처리를 추가하면 될 것 같습니다.

좋은 웹페이지 즐겨찾기