美文网首页unity3D技术分享Unity3D与游戏开发征服Unity3d
Unity编辑器扩展基础三、EditorGUILayout (三

Unity编辑器扩展基础三、EditorGUILayout (三

作者: 不文不武的禾文 | 来源:发表于2020-01-09 07:48 被阅读0次

    小结:

    1、画下拉框的方法有DropdownButton、EnumMaskField、EnumPopup、IntPopup、Popup、EnumMaskPopup、MaskField,DropdownButton比较麻烦,EnumMaskField、EnumMaskPopup、MaskField可以多选。

    2、画Slider的都没什么区别,只是MinMaxSlider是取值范围。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEditor;
    /// <summary>
    /// Unity 5.6   
    /// </summary>
    public class EditorGUILayoutOtherExample : EditorWindow
    {
        //PropertyField  GetControlRect  PrefixLabel
        [MenuItem("EditorGUILayout/EditorGUILayoutOtherExample")]
        static void Init()
        {
            EditorGUILayoutOtherExample window = (EditorGUILayoutOtherExample)EditorWindow.GetWindow(typeof(EditorGUILayoutOtherExample));
            window.Show();
        }
    
        #region  DropdownButton
        private string m_itemString = "";
        #endregion
    
        #region EnumMaskField
        public enum Example
        {
            Option_One = 1, //bits: 0000 0001
            Option_Two = 2,  //bits: 0000 0010
            Option_Three = 4     //bits: 0000 0100
        }
        Example staticFlagMask = 0;
        #endregion
    
        #region EnumPopup
        public enum OPTIONS
        {
            CUBE = 0,
            SPHERE = 1,
            PLANE = 2
        }
        public OPTIONS op;
        #endregion
    
        #region IntPopup
        int selectedSize = 1;
        string[] names = new string[] { "Normal", "Double", "Quadruple" };
        int[] sizes = new int[]{1, 2, 4};
        #endregion
    
        #region Popup
        public string[] options = new string[] { "Cube", "Sphere", "Plane" };
        public int index = 0;
        #endregion
    
        #region EnumMaskPopup
        public enum Options
        {
            CUBE = 0,
            SPHERE = 1,
            PLANE = 2
        }
        public Options m_options;
        #endregion
    
        #region InspectorTitlebar
        bool fold = true;
        bool fold2 = true;
        Transform selectedTransform;
        GameObject selectedGameObject;
        #endregion
    
        #region IntSlider
        int m_intSlider = 1;
        #endregion
        #region IntSlider
        float scale = 0.0f;
        #endregion
    
        #region MinMaxSlider
        float minVal = -10;
        float maxVal = 10;
    
        float minLimit = -20;
        float maxLimit = 20;
        #endregion
    
        #region PasswordField
        string m_passwordField = "";
        #endregion
    
        void OnGUI()
        {
            #region  DropdownButton
            //比较麻烦
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("DropdownButton:");
            if (EditorGUILayout.DropdownButton(new GUIContent(m_itemString), FocusType.Keyboard))
            {
                var alls = new string[4] { "A", "B", "C", "D" };
                GenericMenu _menu = new GenericMenu();
                foreach (var item in alls)
                {
                    if (string.IsNullOrEmpty(item))
                    {
                        continue;
                    }
                    //添加菜单
                    _menu.AddItem(new GUIContent(item), m_itemString.Equals(item), OnValueSelected, item);
                }
                _menu.ShowAsContext();//显示菜单
            }
            EditorGUILayout.EndHorizontal();
            #endregion
    
            #region EnumMaskField
            //可以多选
            staticFlagMask = (Example)EditorGUILayout.EnumMaskField("EnumMaskField:", staticFlagMask);
            #endregion
    
            #region EnumPopup
            op = (OPTIONS)EditorGUILayout.EnumPopup("EnumPopup:", op);
            #endregion
    
            #region IntPopup
            selectedSize = EditorGUILayout.IntPopup("IntPopup: ", selectedSize, names, sizes);
            #endregion
    
            #region Popup
            index = EditorGUILayout.Popup("Popup:",index, options);
            #endregion
    
            #region EnumMaskPopup
            m_options = (Options)EditorGUILayout.EnumMaskPopup("EnumMaskPopup:", m_options);
            #endregion
    
            #region HelpBox
            EditorGUILayout.HelpBox("HelpBox Error:", MessageType.Error);
            EditorGUILayout.HelpBox("HelpBox Info:", MessageType.Info);
            EditorGUILayout.HelpBox("HelpBox None:", MessageType.None);
            EditorGUILayout.HelpBox("HelpBox Warning:", MessageType.Warning);
            #endregion
    
            #region InspectorTitlebar
            selectedTransform = Selection.activeGameObject.transform;
            selectedGameObject = Selection.activeGameObject;
            fold = EditorGUILayout.InspectorTitlebar(fold, selectedTransform);
            fold2 = EditorGUILayout.InspectorTitlebar(fold2, selectedGameObject);
            #endregion
    
            #region IntSlider
            //包括最大最小值
            m_intSlider = EditorGUILayout.IntSlider("IntSlider:",m_intSlider, 1, 10);
            #endregion
    
            #region MinMaxSlider
            //取值范围
            EditorGUILayout.LabelField("Min Val:", minVal.ToString());
            EditorGUILayout.LabelField("Max Val:", maxVal.ToString());
            EditorGUILayout.MinMaxSlider("MinMaxSlider",ref minVal, ref maxVal, minLimit, maxLimit);
            #endregion
            EditorGUILayout.Space();
    
            #region PasswordField
            m_passwordField = EditorGUILayout.PasswordField("PasswordField:", m_passwordField);
            EditorGUILayout.LabelField("输入的文本:", m_passwordField);
            #endregion
    
            #region SelectableLabel
            //可以选择,复制粘贴
            EditorGUILayout.SelectableLabel("SelectableLabel");
            #endregion
    
            scale = EditorGUILayout.Slider("Slider:",scale, 1, 100);
            //自适应高,不能自适应宽
            m_textArea = EditorGUILayout.TextArea(m_textArea);
    
            m_vector2 = EditorGUILayout.Vector2Field("Vector2:", m_vector2);
            m_vector3 = EditorGUILayout.Vector3Field("Vector3:", m_vector3);
            m_vector4 = EditorGUILayout.Vector4Field("Vector4:", m_vector4);
    
        }
    
        string m_textArea = "";
        Vector2 m_vector2;
        Vector3 m_vector3;
        Vector4 m_vector4;
        #region  DropdownButton
        void OnValueSelected(object value)
        {
            m_itemString = value.ToString();
        }
        #endregion
    }
    
    

    到这里,5.6版本的EditorGUILayout类所有方法都试了一遍了。


    效果图:

    相关文章

      网友评论

        本文标题:Unity编辑器扩展基础三、EditorGUILayout (三

        本文链接:https://www.haomeiwen.com/subject/cjwtactx.html