• Unity EditorWindow 笔记


    一:功能

    1.实例化

     //设置插件在菜单栏的位置   和快捷键  
        [MenuItem("YCC's Tools/模型更改/更改父物体和测量长度 %W")]
        //实例化窗体  
        static void Init()
        {
            myTools window = (myTools)EditorWindow.GetWindow(typeof(myTools));
            window.titleContent.text = "更改父物体/测长";
            window.Show();
        }

    2.选项卡制作

     //用GUI画出窗体的空间布局  
        void OnGUI()
        {
            toolbarOption = GUILayout.Toolbar(toolbarOption, toolbarTexts);
            switch (toolbarOption)
            {
                case 0:
                    fnChangeParent();
                    break;
                case 1:
                    fnLength();
                    break;
            }
        }

    3.多个物体更改模型父物体

     

    void fnChangeParent()
        {
            GUILayout.BeginHorizontal("box");
            GUILayout.Label("父物体:", EditorStyles.boldLabel);
            ObjParent = EditorGUILayout.ObjectField(ObjParent, typeof(Transform)) as Transform;
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal("box");
            iChildCount = Selection.transforms.Length;//获取当前鼠标选中的物体个数
            if (Selection.transforms.Length > 0)
            {
                GUILayout.Label("当前选中子物体个数:"+iChildCount, EditorStyles.boldLabel);
                if (GUILayout.Button("应用"))
                {
                    if (ObjParent != null)
                    {
                        for (int i = 0; i < iChildCount; i++)
                        {
                            if (Selection.transforms[i].parent != ObjParent)
                                Selection.transforms[i].parent = ObjParent;
                        }
                        EditorUtility.DisplayDialog("提示", "已更换父物体", "确定");//显示对话框 DisplayDialog (title : string, message : string, ok : string, cancel : string = "") : bool
                    }
                    else
                        this.ShowNotification(new GUIContent("当前没有父物体!"));//显示通知
                }
            }
            else
                GUILayout.Label("当前没有选中子物体" , EditorStyles.boldLabel);
            GUILayout.EndHorizontal();
        }

    4.测量两个物体在场景中的距离

     void fnLength()
        {
            GUILayout.BeginHorizontal("box");
            GUILayout.Label("测量基准物体1:", EditorStyles.boldLabel);
            T1 = EditorGUILayout.ObjectField(T1, typeof(Transform)) as Transform;
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal("box");
            GUILayout.Label("测量参考物体2:", EditorStyles.boldLabel);
            T2 = EditorGUILayout.ObjectField(T2, typeof(Transform)) as Transform;
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            if (T1 != null && T2 != null)
            {
                Debug.DrawLine(T1.position, T2.position, Color.red);
                //if (GUILayout.Button("查    寻"))
                //{  
                fDistance = Vector3.Distance(T1.position, T2.position);
                //}
                GUILayout.Label("距离:", EditorStyles.boldLabel);
                EditorGUILayout.FloatField(fDistance, EditorStyles.boldLabel);
            }
            GUILayout.EndHorizontal();
        }

    二:注意

    1.重绘

     //在OnInspectorUpdate上调用重绘,因为它在窗口上较少重绘,就好象是OnGUI/Update
        void OnInspectorUpdate()
        {
            Repaint();//重绘
        }

    2.错误

     出现错误: Invalid editor window UnityEditor.FallbackEditorWindow   解决方法:Layout-> Revert Factory Settings

  • 相关阅读:
    requests使用text可以查看源码
    正则表达式之search、sub
    【JS】深拷贝与浅拷贝的区别,实现深拷贝的几种方法
    php:对象(object)数据类型实例详解
    usage: git remote add [<options>] <name> <url> -f, --fetch fetch the remote branches --tags import all tags and associated objects when fetching
    PHP 可选参数
    php中文乱码问题的终极解决方案汇总
    html表单提交给PHP然后浏览器显示出了PHP的源代码
    wamp 安装
    wamp选择语言
  • 原文地址:https://www.cnblogs.com/YDoubleC/p/6201736.html
Copyright © 2020-2023  润新知