0


Unity 编辑器篇|(七)编辑器拓展EditorGUILayout类 (全面总结 | 建议收藏)

目录

1. 前言

  • EditorGUILayout专门用于编辑器界面的GUI类,提供了Unity内置类或结构体的控件函数,比如Color类、Vector3类等定义的控件。
  • 为编辑器在Inspector和EditorWindow中扩展提供了很大的方便。

2. 参数

静态函数描述BeginBuildTargetSelectionGrouping开始构建目标组并返回所选 BuildTargetGroup。BeginFadeGroup开始一个可隐藏/显示的组,并且过渡将生成动画。BeginFoldoutHeaderGroup创建一个左侧带有折叠箭头的标签。BeginHorizontal开始一个水平组并找回其矩形。BeginScrollView开始一个自动布局的滚动视图。BeginToggleGroup开始一个垂直组,带有可一次性启用或禁用所有控件的开关。BeginVertical开始一个垂直组并找回其矩形。BoundsField创建用于输入 Bounds 的 Center 和 Extents 字段。BoundsIntField创建用于输入 BoundsInt 的 Position 和 Size 字段。ColorField创建一个用于选择 Color 的字段。CurveField创建一个用于编辑 AnimationCurve 的字段。DelayedDoubleField创建一个用于输入双精度浮点数的延迟文本字段。DelayedFloatField创建一个用于输入浮点数的延迟文本字段。DelayedIntField创建一个用于输入整数的延迟文本字段。DelayedTextField创建一个延迟文本字段。DoubleField生成一个用于输入双精度值的文本字段。DropdownButton创建一个能够对鼠标按下做出反应的按钮,用于显示您自己的下拉菜单内容。EditorToolbar创建一个用指定的编辑器工具集合填充的工具栏。EditorToolbarForTarget创建一个工具栏,该工具栏用与目标对象的 EditorToolAttribute 匹配的编辑器工具集合来填充。EndBuildTargetSelectionGrouping关闭以 BeginBuildTargetSelectionGrouping 开头的组。EndFadeGroup关闭由 BeginFadeGroup 开始的组。EndFoldoutHeaderGroup关闭以 BeginFoldoutHeaderGroup 开头的组。EndHorizontal闭合以 BeginHorizontal 开始的组。EndScrollView结束使用 BeginScrollView 调用开始的滚动视图。EndToggleGroup关闭由 BeginToggleGroup 开始的组。EndVertical闭合以 BeginVertical 开始的组。EnumFlagsField单击后,系统会为枚举类型的每个值显示带有选项的菜单。EnumPopup创建一个枚举弹出选择字段。FloatField生成一个用于输入浮点值的文本字段。Foldout创建一个左侧带有折叠箭头的标签。GetControlRect获取编辑器控件的矩形。GradientField创建一个用于编辑 Gradient 的字段。HelpBox创建一个带有发送给用户的消息的帮助框。InspectorTitlebar创建一个类似于 Inspector 窗口的标题栏。IntField创建一个用于输入整数的文本字段。IntPopup创建一个整数弹出选择字段。IntSlider创建一个滑动条,用户可以进行拖动以在最小值和最大值之间更改整数值。LabelField生成一个标签字段。(用于显示只读信息。)LayerField创建一个层选择字段。LinkButtonMake a clickable link label.LongField创建一个用于输入长整数的文本字段。MaskField创建一个适用于掩码的字段。MinMaxSlider创建一个特殊滑动条,用户可利用该滑动条指定最小值和最大值之间的一个范围。ObjectField生成一个可接收任何对象类型的字段。PasswordField创建一个可让用户输入密码的文本字段。Popup创建一个通用弹出选择字段。PrefixLabel创建一个显示在特定控件前的标签。PropertyField为 SerializedProperty 生成一个字段。RectField创建用于输入 Rect 的 X、Y、W 和 H 字段。RectIntField创建用于输入 RectInt 的 X、Y、W 和 H 字段。SelectableLabel生成一个可选择标签字段。(用于显示可复制粘贴的只读信息。)Slider创建一个滑动条,用户可以进行拖动以在最小值和最大值之间更改值。Space在上一个控件和下一个控件之间留出一个小空间。TagField创建一个标签选择字段。TextArea创建一个文本区域。TextField创建一个文本字段。Toggle创建一个开关。ToggleLeft创建一个开关字段,其中开关位于左侧,标签紧随其右。ToolContextToolbar使用指定的编辑器工具上下文集合填充工具栏。ToolContextToolbarForTarget使用与目标对象的 EditorToolContextAttribute.targetType 匹配的 EditorToolContextVector2Field创建用于输入 Vector2 的 X 和 Y 字段。Vector2IntField创建用于输入 Vector2Int 的 X 和 Y 整数字段。Vector3Field创建用于输入 Vector3 的 X、Y 和 Z 字段。Vector3IntField创建用于输入 Vector3Int 的 X、Y 和 Z 整数字段。Vector4Field创建用于输入 Vector4 的 X、Y、Z 和 W 字段。

3. 功能

3.1 折叠菜单: Foldout

  • Foldout:创建一个左侧带有折叠箭头的标签。bool 用户选择的折叠状态。如果为 true,则应渲染子对象。这适用于创建树或文件夹之类的结构,其中子对象仅在父项展开时显示。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{publicbool showPosition =true;publicstring status ="Select a GameObject";[MenuItem("Examples/Foldout Usage")]staticvoidInit(){UnityEditor.EditorWindow window =GetWindow(typeof(EditorGUIExample));
        window.position =newRect(0,0,150,60);
        window.Show();}voidOnGUI(){
        showPosition = EditorGUILayout.Foldout(showPosition, status);if(showPosition)if(Selection.activeTransform){
                Selection.activeTransform.position = EditorGUI.Vector3Field(newRect(3,25, position.width -6,40),"Position", Selection.activeTransform.position);
                status = Selection.activeTransform.name;}if(!Selection.activeTransform){
            status ="Select a GameObject";
            showPosition =false;}}voidOnInspectorUpdate(){Repaint();}}

1

3.2 折叠组: FoldoutGroup

  • 创建一个左侧带有折叠箭头的标签。
  • 这适用于文件夹之类的结构,其中子对象仅在展开父项时显示。此控件不能嵌套在其他 BeginFoldoutHeaderGroup 中。要使用多个折叠,每个方法都必须以 EndFoldoutHeaderGroup 结尾。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{privatebool foldOut;[MenuItem("Window/BeginFoldoutHeaderGroup")]staticvoidInit(){var example =(EditorGUIExample)EditorWindow.GetWindow(typeof(EditorGUIExample));
        example.Show();}voidOnGUI(){
        foldOut = EditorGUILayout.BeginFoldoutHeaderGroup(foldOut,"折叠栏组");if(foldOut)//只有foldout为true时,才会显示下方内容,相当于“折叠”了。{
            EditorGUILayout.LabelField("这是折叠标签内容");}
        EditorGUILayout.EndFoldoutHeaderGroup();//只不过这种折叠需要成对使用,不然会有BUG}}

3

3.4 下拉菜单:DropdownButton

  • DropdownButton :创建一个能够对鼠标按下做出反应的按钮,用于显示您自己的下拉菜单内容。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{[MenuItem("Tool/TestOnGUI")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}bool _foldoutValue;publicvoidOnGUI(){
        _foldoutValue = EditorGUI.Foldout(newRect(0,0,20,20), _foldoutValue,"折叠");if(_foldoutValue){if(EditorGUI.DropdownButton(newRect(0,20,200,40),newGUIContent("下拉菜单"), FocusType.Keyboard)){GenericMenu genericMenu =newGenericMenu();
                genericMenu.AddItem(newGUIContent("One"),false,()=>{ Debug.Log("回调函数");});
                genericMenu.AddSeparator(string.Empty);//分割线
                genericMenu.AddItem(newGUIContent("Two"),false,()=>{});
                genericMenu.AddItem(newGUIContent("There"),false,()=>{});
                genericMenu.DropDown(newRect(0,20,20,20));}}}}

3

3.5 超链接:LinkButton

  • LinkButton :超链接按钮。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{[MenuItem("Tool/TestOnGUI")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}publicvoidOnGUI(){if(EditorGUILayout.LinkButton("超链接")){
            Application.OpenURL("www.baidu.com");}}}

1

3.6 颜色字段:ColorField

  • ColorField :创建一个用于选择 Color 的字段。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{[MenuItem("Tool/TestOnGUI")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}Color _colorFiled;publicvoidOnGUI(){
        _colorFiled = EditorGUILayout.ColorField(_colorFiled);}}

6

3.7 边界盒字段:BoundsField 、BoundsIntField

  • BoundsField :创建用于输入 Bounds 的 Center 和 Extents 字段。
  • BoundsIntField :创建用于输入 BoundsInt 的 Position 和 Size 字段。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{[MenuItem("Tool/TestOnGUI")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}Bounds _boundsFiledValue;BoundsInt _boundsIntFiledValue;publicvoidOnGUI(){
         _boundsFiledValue = EditorGUILayout.BoundsField(_boundsFiledValue);
  _boundsIntFiledValue = EditorGUILayout.BoundsIntField(_boundsIntFiledValue);}}

1

3.8 动画曲线面板:CurveField

  • CurveField :生成一个用于编辑 AnimationCurve 的字段。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{[MenuItem("Tool/TestOnGUI")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}privateAnimationCurve _animationCurveValue =newAnimationCurve();publicvoidOnGUI(){
        _animationCurveValue = EditorGUILayout.CurveField(_animationCurveValue);}}

8

3.9 渐变:GradientField

  • GradientField :创建一个用于编辑 Gradient 的字段。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{Gradient gradient =newGradient();[MenuItem("Examples/Gradient Field demo")]staticvoidInit(){EditorWindow window =GetWindow(typeof(EditorGUIExample));
        window.position =newRect(0,0,400,199);
        window.Show();}voidOnGUI(){
         gradient = EditorGUILayout.GradientField("Gradient", gradient);}}

9

3.10 对象选择器:ObjectField

  • ObjectField :创建一个对象字段。您可以通过拖放对象或使用对象选择器选择对象来分配对象。当对象引用作为资源的一部分进行存储时,请确保 allowSceneObjects 参数为 false,因为资源无法存储对场景中对象的引用。如果 ObjectField 是脚本组件的自定义编辑器的一部分,请使用 EditorUtility.IsPersistent() 检查该组件是位于资源还是场景对象中。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{[MenuItem("Tool/ObjectField")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}privateSprite _objectFieldValue;publicvoidOnGUI(){
        _objectFieldValue =(Sprite)EditorGUILayout.ObjectField(_objectFieldValue,typeof(Sprite),true);}}

1

3.11 双精度浮点数字段:DoubleField、DelayedDoubleField

  • DoubleField :生成一个用于输入双精度浮点数的文本字段。
  • DelayedDoubleField :创建一个用于输入双精度浮点数的延迟文本字段。与DoubleField 类似,但在用户按 Enter 键或将焦点从双精度浮点数字段移开之前,不会返回新值。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{double value1 =0F;double value2 =0F;[MenuItem("Tool/DoubleField")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}publicvoidOnGUI(){
        value1 = EditorGUILayout.DoubleField(value1);
        value2 = EditorGUILayout.DelayedDoubleField(value2);}}

1

3.12 多维字段:RectField、RectIntField、Vector2Field、Vector2IntField、Vector3Field、Vector3IntField、Vector4Field

  • RectField :创建用于输入 Rect 的 X、Y、W 和 H 字段。
  • RectIntField :创建用于输入 RectInt 的 X、Y、W 和 H 字段。
  • Vector2Field :创建用于输入 Vector2 的 X 和 Y 字段。
  • Vector2IntField :创建用于输入 Vector2Int 的 X 和 Y 整数字段。
  • Vector3Field :创建用于输入 Vector3 的 X、Y 和 Z 字段。
  • Vector3IntField :创建用于输入 Vector3Int 的 X、Y 和 Z 整数字段。
  • Vector4Field :创建用于输入 Vector4 的 X、Y、Z 和 W 字段。

RectField:

usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{Camera[] cameras;[MenuItem("Tool/DoubleField")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}voidOnGUI(){if(GUI.Button(newRect(3,3, position.width -6,20),"Update list"))
            cameras =FindObjectsOfType<Camera>();if(cameras.Length >0){for(var i =0; i < cameras.Length; i++){
                 cameras[i].rect = EditorGUILayout.RectField(
     cameras[i].name,
     cameras[i].rect);}}}}

1

usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{Vector2 v2;Vector2Int v2Int;Vector3 v3;Vector3Int v3Int;Vector4 v4Int;[MenuItem("Tool/DoubleField")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}voidOnGUI(){
         v2 = EditorGUILayout.Vector2Field("Vector2Field", v2);
  v2Int = EditorGUILayout.Vector2IntField("Vector2IntField", v2Int);

  v3 = EditorGUILayout.Vector2Field("Vector3Field", v3);
  v3Int = EditorGUILayout.Vector3IntField("Vector3IntField", v3Int);

  v4Int = EditorGUILayout.Vector4Field("Vector4Field", v4Int);}}

1

3.13 切换框:Toggle、ToggleLeft

  • Toggle :创建一个开关。
  • ToggleLeft :创建一个开关字段,其中开关位于左侧,标签紧随其右。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{bool showClose =true;[MenuItem("Tool/Toggle")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}voidOnGUI(){
        showClose = EditorGUILayout.Toggle("Show Close Button", showClose);

 showClose = EditorGUILayout.ToggleLeft("Show Close Button", showClose);}}

5

3.14 选择标签:TagField、LayerField

  • TagField :创建一个标签选择字段。
  • LayerField :创建一个层选择字段。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{string selectedTag ="";int selectedLayer =0;[MenuItem("Examples/Field")]staticvoidInit(){EditorWindow window =GetWindow<EditorGUIExample>();
        window.position =newRect(0,0,350,70);
        window.Show();}voidOnGUI(){
       selectedTag = EditorGUILayout.TagField("TagField:", selectedTag);
 selectedLayer = EditorGUILayout.LayerField("LayerField:", selectedLayer);}voidOnInspectorUpdate(){Repaint();}}

1

3.15 滑动条:Slider、MinMaxSlider

  • Slider :创建一个滑动条,用户可以进行拖动以在最小值和最大值之间更改值。
  • MinMaxSlider :创建一个特殊滑动条,用户可利用该滑动条指定最小值和最大值之间的一个范围。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{float scale =1.0f;float minVal =-10;float minLimit =-20;float maxVal =10;float maxLimit =20;[MenuItem("Examples/Slider")]staticvoidInit(){EditorWindow window =GetWindow<EditorGUIExample>();
        window.position =newRect(0,0,350,70);
        window.Show();}voidOnGUI(){
         scale = EditorGUILayout.Slider(scale,1,100);
 EditorGUILayout.MinMaxSlider(newGUIContent("Random range:"),ref minVal,ref maxVal,
     minLimit, maxLimit);}}

1

3.16 间隔:Space

  • Space :在上一个控件和下一个控件之间留出一个小空间。
EditorGUILayout.LabelField("----上面的Label----");
EditorGUILayout.Space(10);//进行10个单位的间隔
EditorGUILayout.LabelField("----下面的Label----");

1

3.17 帮助框:HelpBox

  • HelpBox :创建一个带有发送给用户的消息的帮助框。
EditorGUILayout.HelpBox("一般提示,你应该这样做...", MessageType.Info);
EditorGUILayout.HelpBox("警告提示,你可能需要这样做...", MessageType.Warning);
EditorGUILayout.HelpBox("错误提示,你不能这样做...", MessageType.Error);

在这里插入图片描述

3.18 Inspector标题栏:InspectorTitlebar

  • InspectorTitlebar :创建一个类似于 Inspector 窗口的标题栏。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{bool showing =true;[MenuItem("Examples/InspectorTitlebar")]staticvoidInit(){EditorWindow window =GetWindow<EditorGUIExample>();
        window.position =newRect(0,0,350,70);
        window.Show();}voidOnGUI(){var currObj = Selection.activeTransform;
 showing = EditorGUILayout.InspectorTitlebar(showing, currObj, showing);}}

在这里插入图片描述

3.19 文本:FloatField、IntField、LabelField、LongField、MultiFloatField、MultiIntField、MultiPropertyField、TextArea、TextField、PasswordField

  • FloatField :创建一个用于输入浮点数的文本字段。
  • IntField :创建一个用于输入整数的文本字段。
  • LabelField :创建一个标签字段。(用于显示只读信息。)
  • LongField :创建一个用于输入长整数的文本字段。
  • MultiFloatField :创建一个带有文本字段的多控件,用于在同一行中输入多个浮点值。
  • MultiIntField :创建一个带有文本字段的多控件,用于在同一行中输入多个整数。
  • MultiPropertyField :创建一个在同一行中包含多个属性字段的多控件。
  • TextArea :创建一个文本区域。
  • TextField :创建一个文本字段。
  • PasswordField :创建一个可让用户输入密码的文本字段。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{float FloatField =0;int IntField =0;long LongField =0;float[] numbers =newfloat[]{0,1,2};GUIContent[] contents =newGUIContent[]{newGUIContent("X"),newGUIContent("Y"),newGUIContent("Z")};string note ="Notes:";string PasswordField ="";string objNames ="";[MenuItem("Examples/Slider")]staticvoidInit(){EditorWindow window =GetWindow<EditorGUIExample>();
        window.position =newRect(0,0,350,70);
        window.Show();}voidOnGUI(){
        FloatField = EditorGUILayout.FloatField("FloatField:", FloatField);
 IntField = EditorGUILayout.IntField("IntField:", IntField);
 LongField = EditorGUILayout.LongField("LongField:", LongField);
 EditorGUILayout.LabelField("LabelField", EditorApplication.timeSinceStartup.ToString());
 note = EditorGUILayout.TextArea( note);
 objNames = EditorGUILayout.TextField("TextField:",
     objNames);

 PasswordField = EditorGUILayout.PasswordField(PasswordField);}}

1

3.20 通用弹出选择字段:Popup

  • Popup :创建一个通用弹出选择字段,以参数形式获取当前所选的索引,并返回用户选择的索引。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{string[] options ={"Rigidbody","Box Collider","Sphere Collider"};int index =0;[MenuItem("Examples/ProgressBar")]staticvoidInit(){EditorWindow window =GetWindow<EditorGUIExample>();
        window.position =newRect(0,0,350,70);
        window.Show();}voidOnGUI(){
        index = EditorGUI.Popup(newRect(0,0, position.width,20),"Component:",
            index,
            options);}}

15

3.21 单选枚举:EnumPopup

  • EnumPopup :创建一个枚举弹出选择字段。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{OPTIONS display = OPTIONS.Position;publicenumOPTIONS{
        Position =0,
        Rotation =1,
        Scale =2,}[MenuItem("Examples/ProgressBar")]staticvoidInit(){EditorWindow window =GetWindow<EditorGUIExample>();
        window.position =newRect(0,0,350,70);
        window.Show();}voidOnGUI(){
         display =(OPTIONS)EditorGUILayout.EnumPopup("Show:",
    display);}}

16

3.22 多选枚举:EnumFlagsField

  • EnumFlagsField :单击时显示一个菜单,其中包含针对枚举类型的每个值的选项。名称为“Nothing”的值 0 选项和名称为“Everything”的值 ~0(即所有位设置)选项始终显示在菜单顶部。值 0 和 ~0 的名称可以通过在枚举类型中定义这些值来覆盖。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{enumExampleFlagsEnum{
        None =0, 
        A =1<<0,
        B =1<<1,
        AB = A | B, 
        C =1<<2,
        All =~0,}ExampleFlagsEnum m_Flags;[MenuItem("Examples/EnumFlagsField Example")]staticvoidOpenWindow(){GetWindow<EditorGUIExample>().Show();}voidOnGUI(){
      m_Flags =(ExampleFlagsEnum)EditorGUILayout.EnumFlagsField(m_Flags);}}

2

3.23 单选/多选整型:IntPopup、MaskField

  • IntPopup :创建一个整数弹出选择字段。
  • MaskField :创建一个适用于掩码的字段。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{int flags =0;string[] options ={"CanJump","CanShoot","CanSwim"};int selectedSize =1;string[] names ={"Double","Triple","Quadruple"};int[] sizes ={2,3,4};[MenuItem("Examples/Mask Field Usage")]staticvoidInit(){var window =GetWindow<EditorGUIExample>();
      window.Show();}voidOnGUI(){
      flags = EditorGUILayout.MaskField("Player Flags", flags, options);

      selectedSize = EditorGUILayout.IntPopup("Size:",
         selectedSize,
         names,
         sizes);}}

1

3.24 工具栏:EditorToolbar

  • EditorToolbar :创建一个用指定的编辑器工具集合填充的工具栏。
EditorGUILayout.EditorToolbar();

3.25 GUILayout派生控件

privateVector2 scrollRoot;...
EditorGUILayout.BeginHorizontal();//开始水平布局//一大堆控件...
EditorGUILayout.EndHorizontal();//结束水平布局

EditorGUILayout.BeginVertical();//开始垂直布局//一大堆控件...
EditorGUILayout.EndVertical();//结束垂直布局

scrollRoot = EditorGUILayout.BeginScrollView(scrollRoot);//开启滚动视图//一大堆控件...
EditorGUILayout.EndScrollView();//结束滚动视图

4 完整演示版

usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{string PasswordField ="";string m_textArea ="";float sliders =0;int slidera =0;string BeginToggleGroup ="BeginToggleGroup";bool ToggleGroup =false;string Textfield ="";bool fg =false;float sum =0;int count =0;string tag ="aaa";int Layerfield =0;string[] pathname =newstring[]{"All","Asset","..."};float minVal =1;float maxVal =2;float minLimit =-5;float maxLimit =5;staticVector3 center =newVector3(1,2,3);staticVector3 size1 =newVector3(1,2,3);Bounds _bounds =newBounds(center, size1);Color m_color = Color.white;AnimationCurve m_curve = AnimationCurve.Linear(0,0,10,10);Vector2 size =newVector2(100,100);int flags =0;string[] options =newstring[]{"CanJump","CanShoot","CanSwim","Canabc","Canacc"};GameObject game;bool showFoldout;Vector2 m_vector2 =newVector2();Vector3 m_vector3 =newVector3();Vector4 m_vector4 =newVector4();Transform selectedTransform;GameObject selectedGameObject;bool fold;bool fold2;[MenuItem("MyWindow/Window")]staticvoidwindow(){EditorGUIExample mybianyi =GetWindow<EditorGUIExample>();
        mybianyi.Show();}privatevoidOnGUI(){// GUILayout.Width  控制在窗口中物体所在的宽// GUILayout.Height  控制在窗口中物体所在的高//它们的返回的类型为GUILayoutOption#region GUILayout.Label 提示语句

        GUILayout.Label("我的编译器(My compiler)", GUILayout.Width(50), GUILayout.Height(10));//提示语句#endregion#region GUILayout.Button( 按钮
        GUILayout.Label("按钮");if(GUILayout.Button("按钮", GUILayout.Width(40), GUILayout.Height(40))){}#endregion#region GUILayout.TextField 文本
        GUILayout.Label("文本(可以输入)");
        Textfield = GUILayout.TextField(Textfield);//单行//参数2 maxLength 最大有效长度// Textfield = GUILayout.TextField(Textfield,5);#endregion#region GUILayout.Space 空行//参数为float类型代表空行的距离
        GUILayout.Space(10);#endregion#region EditorGUILayout.Toggle 开关(跟Toggle一样)
        fg = EditorGUILayout.Toggle("Toggle", fg);//开关#endregion#region GUILayout.BeginHorizontal 横向
        GUILayout.BeginHorizontal();//可以在里面存放多个如果不规定大小系统会平均分配大小
        GUILayout.Button("按钮");
        Textfield = GUILayout.TextField(Textfield);
        GUILayout.EndHorizontal();//结束语一定要有#endregion#region GUILayout.BeginVertical 纵向
        GUILayout.BeginVertical();//可以在里面存放多个如果不规定大小系统会平均分配大小
        GUILayout.Button("按钮");
        Textfield = GUILayout.TextField(Textfield);
        GUILayout.EndVertical();//结束语一定要有#endregion#region  GUILayout.HorizontalSlider(横) GUILayout.VerticalSlider(纵)  Slider(分横纵 上横下纵)
        sum = GUILayout.HorizontalSlider(sum,0,10);// sum = GUILayout.VerticalSlider(sum, 0, 10);
        GUILayout.Space(20);#endregion#region EditorGUILayout.Popup  下拉
        count = EditorGUILayout.Popup("下拉:", count, pathname);#endregion#region GUILayout.BeginScrollView  滑动列表  //两个true可以让横纵两条线显示出了//两个false可以让横纵两条线不显示出来
        size = GUILayout.BeginScrollView(size,true,true);

        GUILayout.EndScrollView();#endregion#region EditorGUILayout.BoundsField (边界输入)   EditorGUILayout.ColorField(颜色输入)  EditorGUILayout.CurveField(曲线输入)   输入框//BoundsField 边界输入框
        _bounds = EditorGUILayout.BoundsField("BoundsField:", _bounds);//ColorField 颜色输入框
        m_color = EditorGUILayout.ColorField("ColorField:", m_color);//CurveField 曲线输入框
        m_curve = EditorGUILayout.CurveField("CurveField:", m_curve);#endregion#regionEditorGUILayout.TagFieldtag(标签)
        tag = EditorGUILayout.TagField("TagField:", tag);#endregion#region   EditorGUILayout.LayerField(可以获取所有的Layer)//Layerfield 可以获取所有的Layer
        Layerfield = EditorGUILayout.LayerField("LayerField:", Layerfield);#endregion#region   EditorGUILayout.MaskField (下拉可以多选)
        flags = EditorGUILayout.MaskField("MaskField:", flags, options);//Debug.Log(flags);// 除了数组的第一个是1 后面全是2的幂(幂为对应的下标)   如果多选它们会相加   系统默认会添加Nothing (对应的值0) 和Everything(-1)#endregion#region EditorGUILayout.ObjectField(选择物体)
        game =(GameObject)EditorGUILayout.ObjectField(game,typeof(GameObject),true);//typeof(类型) 确定好类型系统会自动帮我找到所有的关于这个类型的物体#endregion#region  EditorGUILayout.Foldout 折叠
        showFoldout = EditorGUILayout.Foldout(showFoldout,"折叠子物体:");if(showFoldout){
            EditorGUI.indentLevel++;//缩进级别
            EditorGUILayout.LabelField("折叠块内容1");
            EditorGUI.indentLevel++;
            EditorGUILayout.LabelField("折叠块内容2");
            EditorGUI.indentLevel--;
            EditorGUI.indentLevel--;
            EditorGUILayout.LabelField("折叠块内容3");}#endregion#region EditorGUILayout.BeginToggleGroup(开关)
        ToggleGroup = EditorGUILayout.BeginToggleGroup(BeginToggleGroup, ToggleGroup);
        Textfield = GUILayout.TextField(Textfield);
        EditorGUILayout.EndToggleGroup();#endregion#region  GUILayout.FlexibleSpace(布局之间左右对齐)
        EditorGUILayout.BeginHorizontal();//开始最外层横向布局
        GUILayout.FlexibleSpace();//布局之间左右对齐
        GUILayout.Label("-----------------分割线-----------------");
        GUILayout.FlexibleSpace();//布局之间左右对齐
        EditorGUILayout.EndHorizontal();#endregion#region  EditorGUILayout.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 EditorGUILayout.Slider(Slider)
        sliders = EditorGUILayout.Slider("Slider:", sliders,0,10);#endregion#region  EditorGUILayout.TextArea(text 自适应高)
        m_textArea = EditorGUILayout.TextArea(m_textArea);//可以多行#endregion#region GUILayout.PasswordField(可以改变成对应的符号)
        EditorGUILayout.BeginHorizontal();
        GUILayout.Label("密码text", GUILayout.Width(60));
        PasswordField = GUILayout.PasswordField(PasswordField,'*');//可以改变成对应的符号
        EditorGUILayout.EndHorizontal();#endregion#region  EditorGUILayout.Vector2Field  EditorGUILayout.Vector3Field  EditorGUILayout.Vector4Field  
        m_vector2 = EditorGUILayout.Vector2Field("Vector2:", m_vector2);
        m_vector3 = EditorGUILayout.Vector3Field("Vector3:", m_vector3);
        m_vector4 = EditorGUILayout.Vector4Field("Vector4:", m_vector4);#endregion#region EditorGUILayout.SelectableLabel (可以复制粘贴)
        EditorGUILayout.SelectableLabel("SelectableLabel");#endregion#region  EditorGUILayout.MinMaxSlider (取值范围)
        EditorGUILayout.LabelField("Min Val:", minVal.ToString());
        EditorGUILayout.LabelField("Max Val:", maxVal.ToString());
        EditorGUILayout.MinMaxSlider("MinMaxSlider",ref minVal,ref maxVal, minLimit, maxLimit);//现在最小  现在最大 最小长度 最大长度      #endregion#region   EditorGUILayout.IntSlider(只能是整数)
        slidera = EditorGUILayout.IntSlider("IntSlider:", slidera,1,10);#endregion#region  EditorGUILayout.InspectorTitlebar(将物体返回回来)//Transform selectedTransform = Selection.activeGameObject.transform;//GameObject selectedGameObject = Selection.activeGameObject;//选择物体(GameObject)//fold = EditorGUILayout.InspectorTitlebar(fold, selectedTransform);//fold2 = EditorGUILayout.InspectorTitlebar(fold2, selectedGameObject);#endregion}}

1

标签: unity 编辑器 c#

本文转载自: https://blog.csdn.net/backlighting2015/article/details/135570746
版权归原作者 游戏开发小Y 所有, 如有侵权,请联系我们删除。

“Unity 编辑器篇|(七)编辑器拓展EditorGUILayout类 (全面总结 | 建议收藏)”的评论:

还没有评论