unity3d EditorGUILayout基本操作汇总

一.静态方法

方法描述
BeginBuildTargetSelectionGrouping开始构建目标分组,并取回选定的BuildTargetGroup。(不同平台显示切换)
BeginFadeGroup开始一个可以隐藏/显示的组,并将对过渡进行动画处理。
BeginFoldoutHeaderGroup使用左侧的折叠箭头制作标签。
BeginHorizontal开始一个水平的小组
BeginScrollView开始自动布局的滚动视图。
BeginToggleGroup通过切换开始一个垂直组,以一次启用或禁用其中的所有控件。
BeginVertical开始一个垂直分布,能够组合不同的控件分布
BoundsField使中心和范围字段输入边界。
BoundsIntField在“位置和大小”字段中输入BoundsInt。
ColorField制作一个用于选择颜色的字段。
CurveField制作一个用于编辑AnimationCurve的字段。
DelayedDoubleField在延迟文本字段中输入双打。
DelayedFloatField为输入浮点数设置一个延迟的文本字段。
DelayedIntField为输入整数创建一个延迟的文本字段。
DelayedTextField设置一个延迟的文本字段。
DoubleField创建一个文本字段以输入双精度值。
DropdownButton创建一个对鼠标按下有反应的按钮,以显示您自己的下拉内容。
EditorToolbar用指定的编辑器工具集合填充工具栏。
EditorToolbarForTarget用与目标对象的EditorToolAttribute匹配的编辑器工具集合填充工具栏。
EndBuildTargetSelectionGrouping关闭以BeginBuildTargetSelectionGrouping开头的组。
EndFadeGroup关闭以BeginFadeGroup开头的组。
EndFoldoutHeaderGroup关闭以BeginFoldoutHeaderGroup开头的组。
EndHorizontal关闭一个以BeginHorizo​​ntal开头的组。
EndScrollView结束从对BeginScrollView的调用开始的滚动视图。
EndToggleGroup关闭以BeginToggleGroup开头的组。
EndVertical关闭以BeginVertical开头的组。
EnumFlagsField单击时显示一个菜单,其中包含每个枚举类型值的选项。
EnumPopup创建一个枚举弹出选择字段。
FloatField创建一个用于输入浮点值的文本字段。
Foldout使用左侧的折叠箭头制作标签。
GetControlRect为编辑器控件获取一个矩形。
GradientField制作一个用于编辑渐变的字段。
HelpBox制作一个向用户显示消息的帮助框。
InspectorTitlebar制作一个类似于检查器窗口的标题栏。
IntField创建一个用于输入整数的文本字段。
IntPopup制作一个整数弹出选择字段。
IntSlider制作一个滑块,用户可以拖动以在最小值和最大值之间更改整数值。
LabelField制作标签字段。(用于显示只读信息。)
LayerField制作一个图层选择字段。
LongField创建一个文本字段以输入长整数。
MaskField为口罩做好准备。
MinMaxSlider制作一个特殊的滑块,用户可以用来指定最小值和最大值之间的范围。
ObjectField创建一个字段以接收任何对象类型。
PasswordField在用户可以输入密码的文本字段中输入密码。
Popup制作一个通用的弹出选择字段。
PrefixLabel在某些控件的前面做一个标签。
PropertyField为SerializedProperty创建一个字段。
RectField输入X,Y,W和H字段以输入Rect。
RectIntField输入X,Y,W和H字段以输入RectInt。
SelectableLabel创建一个可选标签字段。(用于显示可以复制粘贴的只读信息。)
Slider制作一个滑块,用户可以拖动以在最小值和最大值之间更改值。
Space在上一个控件和下一个控件之间留一个小空间。
TagField制作标签选择字段。
TextArea制作一个文本区域。
TextField创建一个文本字段。
Toggle进行切换。
ToggleLeft制作一个切换字段,其中切换位于左侧,标签紧随其右侧。
Vector2Field输入X和Y字段以输入Vector2。
Vector2IntField为输入Vector2Int的X和Y整数字段。
Vector3Field输入X,Y和Z字段以输入Vector3。
Vector3IntField制作一个X,Y和Z整数字段以输入Vector3Int。
Vector4Field输入X,Y,Z和W字段以输入Vector4

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class pets : MonoBehaviour
{
    //姓名
    public string Name;
    //编号
    public int Id;
    //年龄
    public int age=1;
//宠物颜色
    public Color Color_App;
//宠物位置
    public Vector3 Pet_Position;
    //宠物睡眠曲线
    public AnimationCurve Pet_Sleep;
    //宠物guid
    public double Pet_GUID;

    public Pet_FlagsEnum PetFlagsEnum;
    // Start is called before the first frame update
    void Start()
    {
        //Pet_Skill.allowSwitchOff
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
public enum Pet_FlagsEnum
{
    [Header("未知")]
    none = 0,
    [Header("睡觉")]
    sleep = 1 << 0,
    [Header("吃饭")]
    rice = 1 << 1,
    [Header("睡觉和吃饭")]
    sleepandrice =sleep|rice, 
    [Header("泡妞")]
    xxoo = 1 << 2,
    [Header("全干")]
    Everthing = ~0, 
}

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using ILRuntime.Runtime;
using UnityEngine;
using UnityEditor;
using UnityEditor.AnimatedValues;
using UnityEditor.EditorTools;
using Object = UnityEngine.Object;

[CustomEditor(typeof(pets))]
//用于使自定义编辑器支持多对象编辑的属性
[CanEditMultipleObjects] 
public class Cusom_Pets : Editor
{
    AnimBool m_ShowExtraFields;
    private SerializedProperty NameProp;
    private SerializedProperty AgeProp;
    private SerializedProperty IdProp;
    private SerializedProperty Color_Prop;
    private SerializedProperty Pet_PositionProp;
    private SerializedProperty Pet_SleepProp;
    private SerializedProperty pet_guid_Prop;
    private pets Editor_Pets;
    string m_String;
    Color m_Color = Color.white;
    int m_Number = 0;
    private bool IS_BeginFoldoutHeaderGroup=true;
    private void OnEnable()
    {
        NameProp = RentProp("Name");
        AgeProp = RentProp("age");
        IdProp = RentProp("Id");
        Color_Prop= RentProp("Color_App");
        Pet_PositionProp = RentProp("Pet_Position");
        Pet_SleepProp = RentProp("Pet_Sleep");
        pet_guid_Prop = RentProp("Pet_GUID");
        Editor_Pets = target as pets;
        m_ShowExtraFields = new AnimBool(true);
        m_ShowExtraFields.valueChanged.AddListener(Repaint);
        addScroll = new List<string>();
    }
    Vector2 scrollPos;
    private List<string> addScroll;
    private bool IsToggle;
    bool[] skill = new bool[3] { false, false, false };
    private string _dopdownButton;
    private Pet_FlagsEnum Pet_FlagsEnum_iteml;
    private bool Is_EditorGUILayoutFoldout;
    private Gradient gradient = new Gradient();
    private bool IS_InspectorTitlebar;
    private  int   selectedSize = 1;
    string[] selectedSize_names = new string[] {"Normal", "Double", "Quadruple"};
    int[] selectedSize_sizes = {1, 2, 4};
    //遮罩
    static int options_flags = 0;
    static string[] options_mask = new string[] {"CanJump", "CanShoot", "CanSwim"};
    float minVal   = -10;
    float minLimit = -20;
    float maxVal   =  10;
    float maxLimit =  20;
    private string password;
    private Rect init_rect;
    private RectInt _rectInt;
    private float defult_Slider;
    private string defult_TextArea;
    public override void OnInspectorGUI()
    {
        //更新,始终在开始
        serializedObject.Update ();
        //存在平台切换
        BuildTargetGroup selectedBuildTargetGroup =  EditorGUILayout.BeginBuildTargetSelectionGrouping();
        if (selectedBuildTargetGroup == BuildTargetGroup.Android)
        {
            EditorGUILayout.LabelField("Android 文本");
            //创建一个开关
            m_ShowExtraFields.target = EditorGUILayout.ToggleLeft("查看文本颜色", m_ShowExtraFields.target);

            //开始一个可以隐藏/显示的组,并将对过渡进行动画处理。
            if (EditorGUILayout.BeginFadeGroup(m_ShowExtraFields.faded))
            {
                EditorGUILayout.PrefixLabel("Color");
                m_Color = EditorGUILayout.ColorField(m_Color);
                EditorGUILayout.PrefixLabel("Text");
                m_String = EditorGUILayout.TextField(m_String);
                EditorGUILayout.PrefixLabel("Number");
                m_Number = EditorGUILayout.IntSlider(m_Number, 0, 10);
                EditorGUILayout.Space(20);
                
               
            }
          //结束过渡动画
            EditorGUILayout.EndFadeGroup();
            //使用左侧的折叠箭头制作标签。
            IS_BeginFoldoutHeaderGroup= EditorGUILayout.BeginFoldoutHeaderGroup(IS_BeginFoldoutHeaderGroup, "宠物transform");
            if (IS_BeginFoldoutHeaderGroup)
            {
                //如果选中物体
                Pet_PositionProp.vector3Value= EditorGUILayout.Vector3Field(new GUIContent("宠物的位置"), Pet_PositionProp.vector3Value);
            }
            //结束折叠
            EditorGUILayout.EndFoldoutHeaderGroup();
            EditorGUILayout.HelpBox("这是一个ScrollView",MessageType.None,true);
            //开始自动布局的滚动视图
            EditorGUILayout.Space(3);
            scrollPos=  EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(150), GUILayout.Height(50));
            for (int i = 0; i < addScroll.Count; i++)
            {
                GUILayout.Label(addScroll[i]);
            }
            //结束布局
            EditorGUILayout.EndScrollView();
            if (GUILayout.Button("增加文字"))
            {
                addScroll?.Add("妹妹,借我一百块");
            }
            
            
        }
        else   if (selectedBuildTargetGroup == BuildTargetGroup.WebGL)
        {
            EditorGUILayout.HelpBox(new GUIContent("求助"),true);
            EditorGUILayout.Space(10);
            //开始垂直
            Rect r= EditorGUILayout.BeginHorizontal("按钮");
            if (GUI.Button(r,GUIContent.none))
            {
                Debug.Log("呵呵,想多了");
            }
            GUILayout.Label("点击我");
            GUILayout.Label("我告诉你答案");
            EditorGUILayout.EndHorizontal();
            //通过切换开始一个垂直组,以一次启用或禁用其中的所有控件。
            EditorGUILayout.Space(10);
            IsToggle= EditorGUILayout.BeginToggleGroup("这个宠物会的技能", IsToggle);
            skill[0] = EditorGUILayout.Toggle("跳舞", skill[0]);
            skill[1] = EditorGUILayout.Toggle("游泳", skill[1]);
            skill[2] = EditorGUILayout.Toggle("干饭", skill[2]);
            //结束切换组开关
            EditorGUILayout.EndToggleGroup();
            EditorGUILayout.Space(10);
            EditorGUILayout.BoundsField("宠物活动范围( BoundsField )", new Bounds(Vector3.zero, new Vector3(100, 100)));
            EditorGUILayout.Space(10);
            EditorGUILayout.BoundsIntField("宠物活动最小范围( BoundsIntField )",new BoundsInt(Vector3Int.zero, new Vector3Int(10,10,0)));
            EditorGUILayout.Space(10);
            //动画曲线 CurveField
            Pet_SleepProp.animationCurveValue= EditorGUILayout.CurveField("宠物睡眠曲线",Pet_SleepProp.animationCurveValue,Color.cyan,new Rect(new Vector2(5,5),new Vector2(30,200)));
            EditorGUILayout.Space(20);
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("这些宠物爱干嘛( EnumFlagsField)");
            Editor_Pets.PetFlagsEnum = (Pet_FlagsEnum) EditorGUILayout.EnumFlagsField(Pet_FlagsEnum_iteml);
            Editor_Pets.PetFlagsEnum = (Pet_FlagsEnum) EditorGUILayout.EnumFlagsField(Pet_FlagsEnum_iteml);
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Space(10);
            Editor_Pets.PetFlagsEnum= (Pet_FlagsEnum)EditorGUILayout.EnumPopup("第二个enum", Editor_Pets.PetFlagsEnum);
            EditorGUILayout.Space(10);
            EditorGUILayout.ObjectField("宠物对象", null, typeof(Object), true);
            EditorGUILayout.Space(10);
            password=EditorGUILayout.PasswordField("密码输入",password);
            EditorGUILayout.Space(10);
            EditorGUILayout.SelectableLabel("可以复制粘贴的可读标签(SelectableLabel)");
            EditorGUILayout.Space(10);
            defult_Slider=EditorGUILayout.Slider("制作一个滑块(Slider)",defult_Slider, 0, 60);
            EditorGUILayout.Space(10);
            EditorGUILayout.TagField("可选择标签(TagField)");
            EditorGUILayout.Space(10);
            defult_TextArea= EditorGUILayout.TextArea(defult_TextArea,GUILayout.Height(30));

        }
        else
        {
           
            EditorGUILayout.Space(10);
            //显示自定义gui控件
            EditorGUILayout.IntSlider(AgeProp, 0, 20,new GUIContent("年龄"));
            //进度栏
            ProgressBar (AgeProp.intValue / 20.0f, "年龄");
            EditorGUILayout.IntSlider(IdProp, 0, 100, new GUIContent("编号"));
            ProgressBar (IdProp.intValue / 100.0f, "编号");
            //操作属性对象
            EditorGUILayout.PropertyField(NameProp, new GUIContent("宠物名字"));
            //应用更改  始终在末尾
            //垂直列表EndFadeGroup
            Rect r = (Rect)EditorGUILayout.BeginVertical("Button");
            //button
            if (GUI.Button(r, GUIContent.none))
                Debug.Log("呵呵,想多了");
            //文本
            GUILayout.Label("点击我");
            GUILayout.Label("我告诉你答案");
            EditorGUILayout.EndVertical();
            // EditorGUILayout.PropertyField(Color_Prop,new GUIContent("宠物颜色"));
            Color_Prop.colorValue= EditorGUILayout.ColorField("宠物颜色",Color_Prop.colorValue);
            //双精度文本
            pet_guid_Prop.doubleValue=EditorGUILayout.DoubleField("宠物GUID ( DoubleField )", pet_guid_Prop.doubleValue);
            EditorGUILayout.Space(20);
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("下拉内容 (DropdownButton):");
            if (EditorGUILayout.DropdownButton(new GUIContent(_dopdownButton), FocusType.Keyboard))
            {
                var alls = new string[4] { "小猫咪", "小狗狗", "小龟龟", "小鸡鸡" };
                //GenericMenu 用于创建自定义上下文按钮和下拉按钮
                GenericMenu _menu = new GenericMenu();
                
                alls.ToList().ForEach(x =>
                {
                    _menu.AddItem(new GUIContent(x), _dopdownButton.Equals(x), OnValueSelected, x);
                });
               
                _menu.ShowAsContext();
            }
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Space(20);
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("平台工具使用 (EditorToolbar):");
            //工具栏 跟旋转平移一样
            EditorGUILayout.EditorToolbar(new EditorTool[] {new tool_at()});
            EditorGUILayout.Space(20);
            EditorGUILayout.EndHorizontal();
            Is_EditorGUILayoutFoldout=EditorGUILayout.Foldout(Is_EditorGUILayoutFoldout, "Foldout方法的使用");
            if (Is_EditorGUILayoutFoldout)
            {
                EditorGUILayout.Space(10);
                EditorGUILayout.LabelField("使用左侧的折叠箭头制作标签");
             
            }
            EditorGUILayout.Space(10);
            gradient = EditorGUILayout.GradientField("渐变 由用户编辑的渐变(Gradient)", gradient);
            EditorGUILayout.Space(20);
            selectedSize = EditorGUILayout.IntPopup("制作一个整数弹出选择字段: ", selectedSize, selectedSize_names, selectedSize_sizes);
            EditorGUILayout.Space(20);
            selectedSize= EditorGUILayout.Popup("制作一个通用的弹出选择字段。", selectedSize, selectedSize_names);
           // EditorGUILayout.BeginHorizontal();
          
            EditorGUILayout.LabelField("Min Val(MinMaxSlider):", minVal.ToString());
            EditorGUILayout.LabelField("Max Val(MinMaxSlider):", maxVal.ToString());
            EditorGUILayout.MinMaxSlider(ref minVal, ref  maxVal, minLimit, maxLimit);
            EditorGUILayout.Space(20);
           // EditorGUILayout.EndHorizontal();
            EditorGUILayout.LayerField("添加一个层级",0);
            EditorGUILayout.Space(20);
            options_flags = EditorGUILayout.MaskField("添加一个遮罩", options_flags, options_mask);EditorGUILayout.Space(10);
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("显示前缀标签的简单窗口。");
            Editor_Pets.age= EditorGUILayout.IntField(Editor_Pets.age);
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Space(10);
            init_rect= EditorGUILayout.RectField(new GUIContent("RectField"), init_rect);
            EditorGUILayout.Space(10);
            _rectInt = EditorGUILayout.RectIntField("_rectInt", _rectInt);
        }
        EditorGUILayout.Space(30);
        //制作一个类似于检查器窗口的标题栏。PropertyField
        EditorGUILayout.LabelField("制作一个类似于检查器窗口的标题栏。");
        if (Selection.activeGameObject)
        {
           var selectedTransform = Selection.activeGameObject.transform;
           IS_InspectorTitlebar=  EditorGUILayout.InspectorTitlebar(IS_InspectorTitlebar,selectedTransform);
           if (IS_InspectorTitlebar)
           {
               selectedTransform.position =
                   EditorGUILayout.Vector3Field("Position", selectedTransform.position);
               EditorGUILayout.Space();
               selectedTransform.localScale =
                   EditorGUILayout.Vector3Field("Scale", selectedTransform.localScale);
           }
        }
       
            
        EditorGUILayout.EndBuildTargetSelectionGrouping();
        serializedObject.ApplyModifiedProperties ();
    }

    private SerializedProperty RentProp(string arg)
    {
        var iteml=serializedObject.FindProperty(arg);
        return iteml;
    }

    private void ProgressBar(float value, string label)
    {
        //设置边框
        Rect rect = GUILayoutUtility.GetRect(18, 18);
        //进度条
        EditorGUI.ProgressBar(rect,value,label);
        EditorGUILayout.Space(10);
        
    }

    private void OnValueSelected(object arg)
    {
        _dopdownButton = arg.ToString();
    }
    [EditorTool("通用平台工具")]
    public class  tool_at:EditorTool
    {
        GUIContent m_IconContent;
        void OnEnable()
        {
           Texture text = AssetDatabase.LoadAssetAtPath<Texture>("Assets/Shader/texture/cili.png");
            m_IconContent = new GUIContent()
            {
                image = text,
                text = "平台工具",
                tooltip = "平台工具"
            };
        }
        //修改初始icon
        public override GUIContent toolbarIcon
        {
            get { return m_IconContent; }
        }
        public override void OnToolGUI(EditorWindow window)
        {
            EditorGUI.BeginChangeCheck();
            Vector3 position = Tools.handlePosition;
            using (new Handles.DrawingScope(Color.green))
            {
                position = Handles.Slider(position, Vector3.right);
            }

            if (EditorGUI.EndChangeCheck())
            {
                Vector3 delta = position - Tools.handlePosition;

                Undo.RecordObjects(Selection.transforms, "Move Platform");

                foreach (var transform in Selection.transforms)
                    transform.position += delta;
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值