上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

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

guduadmin291月前

目录

  • 1. 前言
  • 2. 参数
  • 3. 功能
    • 3.1 按钮:Button、RepeatButton
    • 3.2 文本:Label、TextArea、TextField、PasswordField
    • 3.3 工具栏:Toolbar
    • 3.4 切换框:Toggle
    • 3.5 滚动条:HorizontalScroll 、VerticalScroll
    • 3.6 滑条:HorizontalSlider、VerticalSlider
    • 3.7 自动布局框:Box
    • 3.8 布局:BeginHorizontal、EndHorizontal、BeginVertical、EndVertical
    • 3.9 滑动布局:ScrollView
    • 3.10 空白间隔:Space
    • 3.11 浮动窗口:Window
    • 3.12 GUILayoutOption
    • 4. 其他

      1. 前言

      • GUILayout 类是 Unity GUI 的接口,并且具有自动布局功能。使用 IMGUI 系统时,可使用两种不同的模式来排列和组织 UI:固定布局模式和自动布局模式。不必使用一种布局模式来替代另一种布局模式,可在同一OnGUI()函数中同时使用这两种模式。
      • 当有预先设计好的界面可供使用时,采用固定布局比较合理。如果预先不知道需要多少元素,或者不想费心进行每个控件的手动定位,则采用自动布局比较合适。例如,如果要基于保存游戏文件创建大量不同的按钮,但无法准确知道要绘制多少按钮,这种情况下采用自动布局可能会更加合理。具体实际上取决于游戏设计以及所需的界面呈现方式。
      • 使用自动布局时有两个主要的不同之处:
        • 使用 GUILayout 而不是 GUI
        • 自动布局控件不需要 Rect() 函数

          2. 参数

          静态函数描述
          BeginArea在一个固定的屏幕区域中开始 GUI 控件的 GUILayout 块。
          BeginHorizontal开始一个水平控件组。
          BeginScrollView开始一个自动布局的滚动视图。
          BeginVertical开始一个垂直控件组。
          Box创建一个自动布局框。
          Button创建一个单击按钮。
          EndArea闭合以 BeginArea 开始的 GUILayout 块。
          EndHorizontal闭合以 BeginHorizontal 开始的组。
          EndScrollView结束通过 BeginScrollView 调用开始的滚动视图。
          EndVertical闭合以 BeginVertical 开始的组。
          ExpandHeight传递给控件以允许或禁止垂直扩展的选项。
          ExpandWidth传递给控件以允许或禁止水平扩展的选项。
          FlexibleSpace插入灵活的空白元素。
          Height传递给控件以使其具有绝对高度的选项。
          HorizontalScrollbar创建一个水平滚动条。
          HorizontalSlider用户可以拖动的水平滑动条,用于在最小值和最大值之间更改某值。
          Label创建一个自动布局标签。
          MaxHeight传递给控件以指定最大高度的选项。
          MaxWidth传递给控件以指定最大宽度的选项。
          MinHeight传递给控件以指定最小高度的选项。
          MinWidth传递给控件以指定最小宽度的选项。
          PasswordField创建一个可让用户输入密码的文本字段。
          RepeatButton创建一个重复按钮。只要用户按住鼠标,该按钮就返回 true。
          SelectionGrid创建一个选择网格。
          Space在当前布局组中插入空白元素。
          TextArea创建一个可供用户编辑字符串的多行文本字段。
          TextField创建一个可供用户编辑字符串的单行文本字段。
          Toggle创建一个打开/关闭的开关按钮。
          Toolbar创建一个工具栏。
          VerticalScrollbar创建一个垂直滚动条。
          VerticalSlider用户可以拖动的垂直滑动条,用于在最小值和最大值之间更改某值。
          Width传递给控件以使其具有绝对宽度的选项。
          Window创建一个对自身内容进行自动布局的弹出窗口。

          3. 功能

          3.1 按钮:Button、RepeatButton

          • Button:创建一个单击按钮,有不少重载参数:
            • text:按钮上显示的文本。
            • image:要在按钮上显示的纹理。
            • content:该按钮的文本、图像和工具提示,是GUIContent类。
            • style:要使用的样式,默认是当前在用的样式。
            • options:一个布局选项列表,用于指定额外的布局属性,此处传递的值会覆盖style,本质是包含枚举的类。
            • RepeatButton:创建一个重复按钮。只要用户按住鼠标,该按钮就返回 true,参数与Button类似。
              using UnityEngine;
              public class GUILayoutExample : MonoBehaviour
              {
                  void OnGUI()
                  {
                      if (GUILayout.Button(" Button"))
                      {
                          Debug.Log("Clicked Button");
                      }
                      if (GUILayout.RepeatButton(" RepeatButton"))
                      {
                          Debug.Log("Clicked RepeatButton");
                      }
                  }
              }
              

              Unity 编辑器篇|(五)编辑器拓展GUILayout类 (全面总结 | 建议收藏),1,第1张

              3.2 文本:Label、TextArea、TextField、PasswordField

              • Label:创建一个自动布局标签。
              • TextArea:创建一个可供用户编辑字符串的多行文本字段。
              • TextField:创建一个可供用户编辑字符串的单行文本字段。
              • PasswordField :创建一个可让用户输入密码的文本字段。
                using UnityEngine;
                public class GUILayoutExample : MonoBehaviour
                {
                    public Texture2D textureToDisplay;
                    public string fieldToEdit = "Hello World";
                    public string areaToEdit = "Hello World\nI've got 2 lines...";
                    public string passwordToEdit = "My Password";
                    void OnGUI()
                    {
                        //Label
                        GUILayout.Label("Hello World!");
                        GUILayout.Label(textureToDisplay);
                        //TextField
                        fieldToEdit = GUILayout.TextField(fieldToEdit, 25);
                        //TextArea
                        areaToEdit = GUILayout.TextArea(areaToEdit, 200);
                        //PasswordField
                        passwordToEdit = GUILayout.PasswordField( passwordToEdit, "*"[0], 25);
                    }
                }
                

                Unity 编辑器篇|(五)编辑器拓展GUILayout类 (全面总结 | 建议收藏),2,第2张

                3.3 工具栏:Toolbar

                • Toolbar:创建一个工具栏。
                  using UnityEngine;
                  public class GUILayoutExample : MonoBehaviour
                  {
                      int toolbarInt = 0;
                      string[] toolbarStrings = { "Toolbar1", "Toolbar2", "Toolbar3" };
                      void OnGUI()
                      {
                          toolbarInt = GUILayout.Toolbar(toolbarInt, toolbarStrings);
                      }
                  }
                  

                  Unity 编辑器篇|(五)编辑器拓展GUILayout类 (全面总结 | 建议收藏),2,第3张

                  3.4 切换框:Toggle

                  • Toggle:创建一个打开/关闭的开关按钮。
                    using UnityEngine;
                    public class GUILayoutExample : MonoBehaviour
                    {
                        bool toggleTxt = false;
                        void OnGUI()
                        {
                            toggleTxt = GUILayout.Toggle(toggleTxt, "A Toggle text");
                        }
                    }
                    

                    Unity 编辑器篇|(五)编辑器拓展GUILayout类 (全面总结 | 建议收藏),3,第4张

                    3.5 滚动条:HorizontalScroll 、VerticalScroll

                    • HorizontalScroll :创建一个水平滚动条。
                    • VerticalScroll:创建一个垂直滚动条。
                      using UnityEngine;
                      public class GUILayoutExample : MonoBehaviour
                      {
                          float vSbarValue;
                          float hSbarValue;
                          void OnGUI()
                          {
                              vSbarValue = GUILayout.VerticalScrollbar(vSbarValue, 1.0f, 10.0f, 0.0f);
                              hSbarValue = GUILayout.HorizontalScrollbar(hSbarValue, 1.0f, 0.0f, 10.0f);
                              GUILayout.Label("This is a text that makes space");
                          }
                      }
                      

                      Unity 编辑器篇|(五)编辑器拓展GUILayout类 (全面总结 | 建议收藏),4,第5张

                      3.6 滑条:HorizontalSlider、VerticalSlider

                      • HorizontalSlider :用户可以拖动的水平滑动条,用于在最小值和最大值之间更改某值。
                      • VerticalSlider:用户可以拖动的垂直滑动条,用于在最小值和最大值之间更改某值。
                        using UnityEngine;
                        public class GUILayoutExample : MonoBehaviour
                        {
                            float vSliderValue = 0.0f;
                            float hSliderValue = 0.0f;
                            void OnGUI()
                            {
                                vSliderValue = GUILayout.VerticalSlider(vSliderValue, 10.0f, 0.0f);
                                hSliderValue = GUILayout.HorizontalSlider(hSliderValue, 0.0f, 10.0f);
                                GUILayout.Label("This is a text that makes space");
                            }
                        }
                        

                        Unity 编辑器篇|(五)编辑器拓展GUILayout类 (全面总结 | 建议收藏),5,第6张

                        3.7 自动布局框:Box

                        • Box :创建一个自动布局框。
                          using UnityEngine;
                          public class GUILayoutExample : MonoBehaviour
                          {
                              Texture tex;
                              void OnGUI()
                              {
                                  if (!tex)
                                  {
                                      Debug.LogError("Missing texture, assign a texture in the inspector");
                                  }
                                  GUILayout.Box(tex);
                                  GUILayout.Box("This is a sized label");
                              }
                          }
                          

                          Unity 编辑器篇|(五)编辑器拓展GUILayout类 (全面总结 | 建议收藏),6,第7张

                          3.8 布局:BeginHorizontal、EndHorizontal、BeginVertical、EndVertical

                          • BeginHorizontal:开始一个水平控件组。
                          • EndHorizontal:闭合以 BeginHorizontal 开始的组。
                          • BeginVertical:开始一个垂直控件组。
                          • EndVertical:闭合以 BeginVertical 开始的组。
                            using UnityEngine;
                            public class GUILayoutExample : MonoBehaviour
                            {
                                void OnGUI()
                                {
                                    GUILayout.BeginHorizontal();
                                    GUILayout.Button("水平按钮1");
                                    GUILayout.Button("水平按钮2");
                                    GUILayout.EndHorizontal();
                                    GUILayout.BeginVertical();
                                    GUILayout.Button("垂直按钮1");
                                    GUILayout.Button("垂直按钮2");
                                    GUILayout.EndVertical();
                                }
                            }
                            

                            Unity 编辑器篇|(五)编辑器拓展GUILayout类 (全面总结 | 建议收藏),6,第8张

                            3.9 滑动布局:ScrollView

                            • ScrollView方法也分为BeginScrollView和EndScrollView,他需要传入至少一个参数Vector2来记录自己滑动到什么地方了。和其他方法不一样的是,如果不给他加限制条件,他会把全部内容物大小计算出来然后拓展面板长度,也就是没有滑动效果。所以我们需要用一些方法来限制他。
                              using UnityEngine;
                              public class GUILayoutExample : MonoBehaviour
                              {
                                  private Vector2 scrollViewRoot;
                                  void OnGUI()
                                  {
                                      //如果不加以限制,会导致面板强制拉伸300长度,按钮全部放出来
                                      scrollViewRoot = GUILayout.BeginScrollView(scrollViewRoot, GUILayout.Width(200), GUILayout.Height(200));
                                      GUILayout.Button("1", GUILayout.Height(100));
                                      GUILayout.Button("2", GUILayout.Height(100));
                                      GUILayout.Button("3", GUILayout.Height(100));
                                      GUILayout.EndScrollView();
                                  }
                              }
                              

                              Unity 编辑器篇|(五)编辑器拓展GUILayout类 (全面总结 | 建议收藏),7,第9张

                              3.10 空白间隔:Space

                              • Space方法在当前布局组中插入空白元素,非常简单,没有任何重载构造函数,只需要传入空白长度就能用了。

                                因为太简单了就不演示了,一般它是拿来美观或者搭配Area使用的。当然,如果它在水平的元素中,自身也会变成水平的空白块。

                                3.11 浮动窗口:Window

                                • Window:创建一个对自身内容进行自动布局的弹出窗口。
                                  using UnityEngine;
                                  public class GUILayoutExample : MonoBehaviour
                                  {
                                      Rect windowRect = new Rect(20, 20, 120, 50);
                                      void OnGUI()
                                      {
                                          windowRect = GUILayout.Window(0, windowRect, DoMyWindow, "My Window");
                                      }
                                      void DoMyWindow(int windowID)
                                      {
                                          if (GUILayout.Button("Hello World"))
                                          {
                                              print("Got a click");
                                          }
                                      }
                                  }
                                  

                                  Unity 编辑器篇|(五)编辑器拓展GUILayout类 (全面总结 | 建议收藏),8,第10张

                                  3.12 GUILayoutOption

                                  • GUILayoutOption是绝大部分GUILayout方法的可选参数,他的主要作用就是控制GUI的样式。
                                  • 有以下这些方法会返回GUILayoutOption:
                                    GUILayout.Width(float width) // 传递给控件以使其具有绝对宽度的选项
                                    GUILayout.Height(float height) // 传递给控件以使其具有绝对高度的选项
                                    GUILayout.MinWidth(float width) // 传递给控件以指定最小宽度的选项
                                    GUILayout.MinHeight(float height) // 传递给控件以指定最小高度的选项
                                    GUILayout.MaxWidth(float width)// 传递给控件以指定最大宽度的选项
                                    GUILayout.MaxHeight(float width) // 传递给控件以指定最大高度的选项
                                    GUILayout.ExpandHeight(bool expand) // 传递给控件以允许或禁止垂直扩展的选项
                                    GUILayout.ExpandWidth(bool expand) // 传递给控件以允许或禁止水平扩展的选项
                                    

                                    4. 其他

                                    以上主要就是进行OnGUI的使用,实际上,GUILayout类还能用于Editor方法。Editor类与GUILayout类进行编辑器拓展,列如:

                                    using UnityEditor;
                                    using UnityEngine;
                                    [CustomEditor(typeof(GUILayoutExample))]
                                    public class GUILayoutEditor : Editor
                                    {
                                        public override void OnInspectorGUI()
                                        {
                                            base.OnInspectorGUI();
                                            GUILayoutExample tar = target as GUILayoutExample;
                                            if (GUILayout.Button("开始调试"))
                                            {
                                                tar.TestFunc();
                                            }
                                        }
                                    }
                                    

                                    Unity 编辑器篇|(五)编辑器拓展GUILayout类 (全面总结 | 建议收藏),10,第11张

网友评论

搜索
最新文章
热门文章
热门标签
 
 梦到拉肚子是什么意思  周公解梦大全查询梦2345原版解梦  梦到与前任做春梦