前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity 编辑器开发实战【Editor Window】- Replacer 替换器

Unity 编辑器开发实战【Editor Window】- Replacer 替换器

作者头像
CoderZ
发布2022-08-29 17:02:58
2920
发布2022-08-29 17:02:58
举报

如图所示,假如一个模型被大量的规整的摆放在场景中,当我们修改了这个模型需要替换时,需要将新模型按照如上位置进行逐个替换比较麻烦,下面介绍的工具Replacer可以很方便的进行批量替换:

在Hierarchy层级窗口选中所有需要替换的模型,然后指定用来替换的模型,点击Replace进行替换

工具代码如下:

代码语言:javascript
复制
using UnityEditor;
using UnityEngine;

namespace SK.Framework
{
    /// <summary>
    /// 替换器
    /// </summary>
    public class Replacer : EditorWindow
    {
        [MenuItem("SKFramework/Replacer")]
        public static void Open()
        {
            var window = GetWindow<Replacer>("Replacer");
            window.maxSize = new Vector2(300f, 60f);
            window.minSize = new Vector2(300f, 60f);
            window.Show();
        }
        //用于替换的物体
        private GameObject target;

        private void OnGUI()
        {
            int count = Selection.gameObjects.Length;
            GUILayout.Label(string.Format("Count: {0}", count));

            GUILayout.BeginHorizontal();
            GUILayout.Label("Replacer:", GUILayout.Width(100f));
            target = EditorGUILayout.ObjectField(target, typeof(GameObject), true) as GameObject;
            GUILayout.EndHorizontal();

            GUI.enabled = target != null;
            if (GUILayout.Button("Replace"))
            {
                //弹窗提醒
                if (EditorUtility.DisplayDialog("提醒", string.Format("将使用{0}替换所有选中的物体,是否确认?", target.name), "确认", "取消"))
                {
                    //遍历
                    for (int i = 0; i < Selection.gameObjects.Length; i++)
                    {
                        var go = Selection.gameObjects[i];
                        //实例化
                        var instance = Instantiate(target);
                        instance.transform.position = go.transform.position;
                        instance.transform.rotation = go.transform.rotation;
                        instance.transform.SetParent(go.transform.parent);
                        //销毁
                        DestroyImmediate(go.gameObject);
                        i--;
                    }
                }
            }
        }

        private void OnSelectionChange()
        {
            Repaint();
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 当代野生程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档