来点实用的编辑器脚本

1.快速给场景中选中的物体添加一个父类,并可以用快捷键alt+p

    [MenuItem("MyTools/CreateOneParent &p", false, 5)]
    public static void CreateOneParent()
    {
        if (Selection.transforms.Length > 0)
        {
            Transform[] tf = Selection.transforms;
            GameObject go = new GameObject();
            go.transform.localScale = Vector3.one;
            go.transform.position = Vector3.zero;
            go.name = "Parent";
            for (int i = 0; i < tf.Length; i++)
            {
                tf[i].SetParent(go.transform);
            }
        }
    }

2.快速对选中的多个预制体进行apply

    [MenuItem("MyTools/Apply_To_Prefab", false, 61)]
    public static void Apply_To_Prefab()
    {
        GameObject[] gos = Selection.gameObjects;
        for (int i = 0; i < gos.Length; i++)
        {
            GameObject souce = PrefabUtility.GetPrefabParent(gos[i]) as GameObject;
            if (souce == null) //当前没有该预制体
            {
                GameObject go = Selection.activeGameObject;
                string path = "Assets/APP/Prefabs/";
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }

                path += Selection.activeGameObject.name + ".prefab";
                PrefabUtility.CreatePrefab(path, go);
            }
            else
            {
                PrefabUtility.ReplacePrefab(gos[i], souce, ReplacePrefabOptions.ConnectToPrefab);
            }
            EditorUtility.DisplayProgressBar("apply", "apply中....", (float)i / gos.Length);
        }

        EditorUtility.ClearProgressBar();
    }

3.快速对选中的预制体进行一些操作,(例子中是给预制体添加一个图片作为子物体)

    [MenuItem("MyTools/AddLocked", false, 71)]
    public static void AddLocked()
    {
        GameObject[] prefabs = Selection.gameObjects;
        for (int i = 0; i < prefabs.Length; i++)
        {
            Debug.Log(prefabs[i].name);
            GameObject souce = PrefabUtility.InstantiatePrefab(prefabs[i]) as GameObject;
            float y = souce.GetComponent<BoxCollider2D>().offset.y;
            GameObject go = new GameObject("LockedImg");
            go.transform.parent = souce.transform.Find("BlockObject");
            go.transform.localPosition = Vector3.zero;
            go.transform.localScale = Vector3.one;
            go.AddComponent<SortingGroup>().sortingOrder = 100;

            Sprite lockSp = Resources.Load<Sprite>("lock");
            GameObject lockGo = new GameObject("lock");
            lockGo.transform.parent = go.transform;
            lockGo.transform.localPosition = Vector3.zero + new Vector3(0, y, 0);
            lockGo.transform.localScale = Vector3.one;
            lockGo.AddComponent<SpriteRenderer>().sprite = lockSp;
            lockGo.GetComponent<SpriteRenderer>().sortingOrder = 20;
            EditorUtility.DisplayProgressBar("Apply预制体……", "Apply预制体……", (float)i / prefabs.Length);
            PrefabUtility.ReplacePrefab(souce, prefabs[i], ReplacePrefabOptions.ConnectToPrefab);
            DestroyImmediate(souce);
        }

        EditorUtility.ClearProgressBar();
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值