Unity列表对象重命名

开发的时候场景里经常需要给列表对象重命名,Unity默认的命名是括号"Prefab(1)",有时候想使用自己习惯性的命名就必须一个个改名字。

在Unity2020之后编辑器提供了几个可选的命名方式。在ProjectSetting=>Editor=>Numbering Scheme下可以选择。除了括号以外还有点"Prefab.1"和下划线"Prefab_1"。

如果版本在2020之前或者提供的方案都不是自己的习惯方案,就只能通过编辑器脚本实现了。

脚本如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEditor.Experimental.SceneManagement;
public class RenameList
{

    [MenuItem("Edit/RenameList", false)]
    public static void Rename()
    {
        List<GameObject> objs = new List<GameObject>(Selection.gameObjects);

        if (objs.Count > 0)
        {
            objs.Sort((a, b) =>
            {
                return a.transform.GetSiblingIndex() - b.transform.GetSiblingIndex();
            });
            string targetName = objs[0].name;
            targetName = targetName.Split('_')[0];
            for(int i = 0; i< objs.Count; i++)
            {
                objs[i].name = $"{targetName}_{i+1}";
            }
        }
        var prefabStage = PrefabStageUtility.GetCurrentPrefabStage();
        if (prefabStage != null)
        {
            ApplySelectedPrefab();
        }

    }

    public static void ApplySelectedPrefab()
    {
        var prefabStage = PrefabStageUtility.GetCurrentPrefabStage();
        var prefabFind = prefabStage.prefabContentsRoot.gameObject;
        PrefabUtility.SaveAsPrefabAsset(prefabFind, prefabStage.prefabAssetPath);
        AssetDatabase.SaveAssets();
        Debug.Log(string.Format("{0} is applyed success!", prefabStage.prefabAssetPath));
    }
}

使用方法是多选想要重命名的对象,然后点击菜单Editor=>RenameList,会以层级往下自增的方式命名。

注意函数ApplySelectedPrefab。当我们重命名预制体中的内容时,其修改不会直接应用到预制体上。所以先用PrefabStageUtility.GetCurrentPrefabStage()判断是否处于编辑预制体状态,如果是编辑的预制体,需要进一步保存编辑过的内容到预制体中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值