Editor GUI 编辑器入门

1,239 阅读2分钟
本文转自Unity Connect博主郡墙
Editor GUI 编辑器入门,常见对GUI界面编写及快速实现对介绍,附示例代码,hand by hand ,just do it.

基础GUI 

文本类 

示例代码

private void BaseAPI()
        {
            GUILayout.Label(mLableStr);

            EditorGUILayout.SelectableLabel(mLabelField);
            
            EditorGUILayout.LabelField("LabelField", mLabelField);

            mTextField = EditorGUILayout.TextField("TextField", mTextField);
            mIntField = EditorGUILayout.IntField("IntField", mIntField);
            mFloatField = EditorGUILayout.FloatField("FloatField", mFloatField);

            mTextArea = EditorGUILayout.TextArea(mTextArea, GUILayout.Height(40));

            GUIStyle tempFontStyle = new GUIStyle();
            tempFontStyle.normal.background = null;
            tempFontStyle.normal.textColor = Color.yellow;
            tempFontStyle.fontStyle = FontStyle.BoldAndItalic;
            tempFontStyle.fontSize = 18;
            GUILayout.Label(mCustomStr, tempFontStyle);
        }
效果预览

密码输入样式 

示例代码

private void PasswordField()
        {
            using (new EditorGUILayout.HorizontalScope())
            {
                GUILayout.Label("PasswordField_1");
                mPasswordField_1 = GUILayout.PasswordField(mPasswordField_1, '*');
            }
            mPasswordField_2 = EditorGUILayout.PasswordField("PasswordField_2", mPasswordField_2);
        }
效果预览

滑动条 

示例代码

private void Slider()
        {
            mSlider = EditorGUILayout.Slider("Slider", mSlider, 0.0f, 49.9f);
            EditorGUILayout.MinMaxSlider(new GUIContent("MinMaxSlider"), ref mMinValue, ref mMaxValue, 0, 100);
        }
效果预览
勾选框 

示例代码

private void Toggle()
        {
            mToggle = GUILayout.Toggle(mToggle, "Toggle");
            mToggle = EditorGUILayout.Toggle(new GUIContent("Toggle"), mToggle);
        }

效果预览
Toolbar 

示例代码

private void Toolbar()
        {
            mToolbarIndex = GUILayout.Toolbar(mToolbarIndex, mToolbarOptions);
            EditorGUILayout.LabelField("Selected Toobar", mToolbarOptions[mToolbarIndex]);
        }
效果预览
可选条件框的类型 

示例代码

 private void Popup()
        {
            mEnumPopup = (HaloEnum)EditorGUILayout.EnumPopup("EnumPopup", mEnumPopup);
            mEnumMaskField = (HaloEnum)EditorGUILayout.EnumMaskField("EnumMaskField", mEnumMaskField);
            mPopupIndex = EditorGUILayout.Popup("Popup", mPopupIndex, mPopupOptions);

            using (new EditorGUILayout.HorizontalScope())
            {
                mIntPopupIndex = EditorGUILayout.IntPopup("IntPopup", mIntPopupIndex, mIntPopupOptions, mIntPopupSizes);
                EditorGUILayout.LabelField("Selected IntPopup", mIntPopupIndex.ToString());
            }

            mTagField = EditorGUILayout.TagField("TagField", mTagField);

            mLayerField = EditorGUILayout.LayerField("LayerField", mLayerField);

            mMaskFieldIndex = EditorGUILayout.MaskField("MaskField", mMaskFieldIndex, mMaskFieldOptions);

            mColorField = EditorGUILayout.ColorField("ColorField", mColorField);
        }
效果预览
Unity常见基础数据类型 

示例代码

 private void UnityProperty()
        {
            Color tempOrgColor = GUI.backgroundColor;

            using (new EditorGUILayout.VerticalScope(GUI.skin.box))
            {
                //修改背景颜色;
                GUI.backgroundColor = Color.gray;
                mVector3Field = EditorGUILayout.Vector3Field("Vector3Field", mVector3Field);
                GUI.backgroundColor = tempOrgColor;
            }

            mObjectField = EditorGUILayout.ObjectField(new GUIContent("ObjectField"), mObjectField, typeof(GameObject), true);

            using (new EditorGUILayout.VerticalScope(GUI.skin.box))
            {
                //修改背景颜色;
                GUI.backgroundColor = Color.green;
                mRectField = EditorGUILayout.RectField("RectField", mRectField);
                GUI.backgroundColor = tempOrgColor;
            }
        }
效果预览

其他常用功能 

效果预览

示例代码
private void OtherEdiotorUtility()
        {
            if (GUILayout.Button(new GUIContent("弹出系统提示消息", "调用系统级别的提示信息")))
            {
                ShowNotification(new GUIContent("这是来自 ShowNotification 的弹窗消息"));
            }

            bool tempButtonChange = false;

            if (GUILayout.Button(new GUIContent("显示二级窗口", "窗口内的二级弹窗"))) { mDrawSecWindow = true; tempButtonChange = true; }
            if (GUILayout.Button(new GUIContent("绘制图形", "绘制图形的示例"))) { mDrawGraphWindow = true; tempButtonChange = true; }
            if (tempButtonChange && (mDrawGraphWindow || mDrawSecWindow))
            {
                mSecWindowRect = new Rect((int)position.width >> 2, (int)position.height >> 2, (int)position.width >> 1, (int)position.height >> 1);
            }

            EditorGUILayout.Space();

            using (new EditorGUILayout.VerticalScope(GUI.skin.box))
            {
                GUILayout.Label("EditorUtility相关");
                if (string.IsNullOrEmpty(mOpenFilePanel) == false)
                {
                    EditorGUILayout.LabelField("OpenFilePanel SelectPath", mOpenFilePanel);
                }

                using (new EditorGUILayout.HorizontalScope(GUI.skin.scrollView))
                {
                    if (GUILayout.Button("OpenFilePanel"))
                    {
                        mOpenFilePanel = EditorUtility.OpenFilePanel("OpenFilePanel", "Assets", "*");
                    }

                    if (GUILayout.Button("RevealInFinder"))
                    {
                        EditorUtility.RevealInFinder(mOpenFilePanel);
                    }
                }

                if (GUILayout.Button("DisplayDialog"))
                {
                    bool tempResult = EditorUtility.DisplayDialog("这是一个系统二次确认窗口", "文本内容", "确认", "取消");
                    string tempTip = tempResult ? "你按下了二次确认" : "你取消了二次确认";
                    ShowNotification(new GUIContent(tempTip));
                }
                
            }
        }
戳上方链接下载Unity官方app,发现更多干货,在线技术答疑交友社区,还可下载本文演示代码附件哦~