Unity 批量修改命名(重命名)

一、 效果展示

在这里插入图片描述

二、代码

#if UNITY_EDITOR
using System.IO;
using UnityEditor;
using UnityEngine;

namespace CustomEditorWindow
{
    public class RenameTool : EditorWindow
    {
        #region members
        private Vector2 scrollPos;
        private int charSize;
        private string targetName = string.Empty;
        private string startNum_str = "0";
        private int startNum_int = 0;
        #endregion
        #region get window
        [MenuItem("Tools/Rename Tool")]
        private static void OpenWindow()
        {
            GetWindow<RenameTool>("Rename Tool").Show();
        }
        #endregion
        #region render the window
        private void OnGUI()
        {
            scrollPos = GUILayout.BeginScrollView(scrollPos);
            {
                #region tool title
                charSize = GUI.skin.label.fontSize;
                GUI.color = Color.yellow;
                GUILayout.Space(10);                
                GUI.skin.label.fontSize = 24;
                GUI.skin.label.alignment = TextAnchor.MiddleCenter;
                GUILayout.Label("Rename Tool");
                GUI.skin.label.fontSize = charSize;
                GUI.skin.label.alignment = TextAnchor.MiddleLeft;
                GUI.color = Color.white;
                GUILayout.Space(20);
                #endregion

                GUILayout.BeginVertical();
                {
                    #region text input
                    GUILayout.BeginHorizontal();
                    {
                        GUILayout.Label("Name Style: ");
                        GUILayout.FlexibleSpace();
                        targetName = GUILayout.TextField(targetName, GUILayout.Width(140));
                    }
                    GUILayout.EndHorizontal();
                    GUILayout.Space(10);

                    GUILayout.BeginHorizontal();
                    {
                        GUILayout.Label("Start Number: ");
                        GUILayout.FlexibleSpace();
                        startNum_str = GUILayout.TextField(startNum_str, GUILayout.Width(60));
                        try
                        {
                            startNum_int = int.Parse(startNum_str);
                        }
                        catch
                        {

                        }
                    }
                    GUILayout.EndHorizontal();
                    #endregion
                    #region button
                    GUILayout.Space(30);
                    bool hasObject = (Selection.objects.Length > 0);
                    GUI.enabled = hasObject;

                    GUILayout.FlexibleSpace();
                    if (!hasObject)
                    {
                        GUI.color = Color.red;
                        GUILayout.Button("No Selected Objects!");
                        GUI.color = Color.white;

                    }
                    else
                    {
                        if (GUILayout.Button("Rename"))
                        {
                            Rename(targetName, startNum_int);
                        }
                    }
                    GUILayout.Space(20);
                    #endregion
                }
                GUILayout.EndVertical();
            }
            GUILayout.EndScrollView();
        }
        #endregion
        #region Rename Function
        private void Rename(string t_name, int t_index)
        {
            string name = t_name.Trim();//去除头尾空白字符串
            int index = t_index;
            if ((name + index) != string.Empty)//若名字不为空
            {
                bool isAssetsObject = false;//flag, 是否是assets文件夹的资源

                foreach (Object o in Selection.objects)
                {
                    string path_g = AssetDatabase.GetAssetPath(o);//获得选中物的路径
                    //查看路径后缀
                    if (Path.GetExtension(path_g) != "")//若后缀不为空, 则为assets文件夹物体
                    {
                        if (name.Length >=2 && name.Substring(0, 2) == "m_")// m_ 开头会被吞
                        {
                            //用 M_ 修正
                            string temp_name = name.Remove(0, 1);
                            name = temp_name.Insert(0, "M");
                        }
                        AssetDatabase.RenameAsset(path_g, name + index);//改名API
                        if (!isAssetsObject)
                        {
                            isAssetsObject = true;//修改flag
                        }
                    }
                    else//后缀为空, 是场景物体
                    {
                        o.name = name + index;
                    }
                    index++;
                }
                if (isAssetsObject)//若是assets文件夹资源, 则刷新assets
                {
                    AssetDatabase.SaveAssets();
                    AssetDatabase.Refresh();
                }
            }
        }
        #endregion
    }
}
#endif
  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用Unity自带的命名功能来批量更改预算节点的名称。 1. 在“Hierarchy”窗口中选择要更改名称的预算节点。 2. 右键单击所选预算节点并选择“Rename”。 3. 输入新名称并按下“Enter”键。 4. Unity会自动将所选的所有预算节点命名为新名称。 如果你想要进一步自动化这个过程,你可以使用C#脚本来批量更改预算节点的名称。以下是一个简单的脚本示例: ```csharp using UnityEngine; using UnityEditor; public class RenameBones : EditorWindow { [MenuItem("Tools/Rename Bones")] public static void ShowWindow() { GetWindow<RenameBones>("Rename Bones"); } private string oldName = ""; private string newName = ""; private void OnGUI() { GUILayout.Label("Rename Bones", EditorStyles.boldLabel); oldName = EditorGUILayout.TextField("Old Name", oldName); newName = EditorGUILayout.TextField("New Name", newName); if (GUILayout.Button("Rename")) { foreach (GameObject obj in Selection.gameObjects) { if (obj.GetComponent<SkinnedMeshRenderer>() != null) { SkinnedMeshRenderer skinnedMeshRenderer = obj.GetComponent<SkinnedMeshRenderer>(); Transform[] bones = skinnedMeshRenderer.bones; for (int i = 0; i < bones.Length; i++) { string name = bones[i].name.Replace(oldName, newName); bones[i].name = name; } } } } } } ``` 将此脚本添加到Unity项目中,然后在Unity编辑器菜单中选择“Tools > Rename Bones”以打开命名窗口。在窗口中输入原始名称和新名称,然后单击“Rename”按钮即可批量更改预算节点名称。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值