zoukankan      html  css  js  c++  java
  • Unity3D笔记七 GUILayout

     一、说到GUILayout就要提到GUI,二者的区别是什么

      GUILayout是游戏界面的布局。GUI(界面)和GUILayout(界面布局)功能上面是相似的从命名中就可以看到这两个东西非常相像,但是在使用过程中两者还是存在一定区别的。

    1、使用GUI绘制控件的时候,需要设置控件的Rect()方法,这样设置的控件非常不灵活,因为它的坐标以及大小已经固定死了,这时如果控件中的内容长度发生改变,就会直接影响展示效果。如果我们需要制作控件的自适应?怎么办?GUILayout登场见2

    2、GUILayout制作界面,可以很方便地为我们解决上述难题。GUILayout可以自适应组件大小和自动计算组件显示区域,无须设定显示区域,系统会自动帮我们计算控件的显示区域,并且保证它们不会重叠。

     二、GUILayout常用分类

    1、线性布局 

         1.1水平线性布局:首先需要使用BeginHorizontal()方法,然后将控件添加至线性布局当中,最后使用EndHorizontal()方法来结束当前线性布局

      1.2垂直线性布局:首先需要使用BeginVertical()方法与EndVertical()方法。

       public Texture2D texture2D;
    
       private void OnGUI()
       {
           //开始水平线性布局
            GUILayout.BeginHorizontal();
            GUILayout.Box("开始水平布局");
            GUILayout.Button("按钮");
            GUILayout.Label("文本");
            GUILayout.TextField("输入框");
            GUILayout.Box(texture2D, GUIStyle.none);
            //结束水平线性布局
            GUILayout.EndHorizontal();
    
            //开始垂直线性布局
            GUILayout.BeginVertical();
            GUILayout.Box("开始垂直布局");
            GUILayout.Button("按钮");
            GUILayout.Label("文本");
            GUILayout.TextField("输入框");
            GUILayout.Box(texture2D, GUIStyle.none);
    
            //objCube.renderer.material.mainTexture=texture2D动态加贴图这么加的
            //结束垂直线性布局
            GUILayout.EndVertical();
       }

    2、控件偏移

      使用Space()方法可以设置控件之间的偏移量

         #region  控件偏移
            GUILayout.BeginArea(new Rect(0, 10, 300, 100));//"开始一个显示的区域"
            GUILayout.BeginHorizontal("开始最外层横向布局");
            GUILayout.BeginVertical("嵌套第一个纵向布局");
            GUILayout.Box("Box11");
            GUILayout.Space(10);//两个Box中间偏移10 像素
            GUILayout.Box("Box12");
            GUILayout.EndVertical();//"结束嵌套的纵向布局"
            GUILayout.Space(20);//两个纵向布局间隔20像素
            GUILayout.BeginVertical("嵌套第二个纵向布局");
            GUILayout.Box("Box21");
            GUILayout.Space(10);//两个Box中间偏移10 像素
            GUILayout.Box("Box22");
            GUILayout.EndVertical();//"结束嵌套的纵向布局"
            GUILayout.EndHorizontal();//结束最外层横向布局
            GUILayout.EndArea();
            #endregion

    3、对齐方式

      一般情况下,游戏窗口都是矩形的,而矩形由4个角组成:左上角、右上角、左下角和右下角。如果要使控件分别对齐在这4个角当中,就需要使用FlexibleSpace()对其做偏移了。FlexibleSpace(){[ˈfleksəbl]adj. 的原理是将两个控件完全左右或上下对齐在显示区域当中。它是一个非常重要的方法,在不同分辨率下可以直接确定偏移的位置,并且不会超出显示范围。

     #region 对齐方式
            GUILayout.BeginArea(new Rect(0,0,Screen.width,Screen.height));//开始一个显示区域
            GUILayout.BeginHorizontal();//创建一个最外层横向布局
            GUILayout.BeginVertical();//开始嵌套一个内层纵向布局
            GUILayout.Box("Box1");//两个Box控件上下对齐 
            GUILayout.FlexibleSpace();
            GUILayout.Box("Box2");
            GUILayout.EndVertical();//结束内层嵌套的纵向布局
            GUILayout.FlexibleSpace();//布局之间左右对齐
            GUILayout.BeginVertical();
            GUILayout.Box("Box3");
            GUILayout.FlexibleSpace();
            GUILayout.Box("Box4");
            GUILayout.EndVertical();
            GUILayout.EndHorizontal();
            GUILayout.EndArea();
            #endregion

    4、添加与关闭窗口

     游戏窗口是可以动态添加与关闭

     #region 窗口
        public ArrayList winList=new ArrayList();
        public Texture icon;
        #endregion
        // Use this for initialization
        void Start()
        { 
            winList.Add(new Rect(winList.Count*100, 50, 150, 50));
        }
    
     private void OnGUI()
        {
        #region 窗口
    
            int count = winList.Count;
            for (int i = 0; i < count; i++)
            {
                winList[i] = GUILayout.Window(i, new Rect(count*100, 50, 150, 100), AddWindow, "窗口ID:" + i);
            }
    
            #endregion
        }
    
    
     private void AddWindow(int id)
        {
            GUILayout.BeginHorizontal();//开始一个水平布局
            GUILayout.Label(icon, GUILayout.Width(50), GUILayout.Height(50));//绘制图标
            GUILayout.Label("这是一个全新的窗口");
            GUILayout.EndHorizontal();
    
            GUILayout.BeginHorizontal();//开始一个水平布局
            if (GUILayout.Button("添加窗口按钮"))
            {
                winList.Add(new Rect(winList.Count*100, 50, 150, 100));
            }
    
            if (GUILayout.Button("关闭窗口按钮"))
            {
                winList.RemoveAt(id);
            }
            GUILayout.EndHorizontal();//关闭水平布局
            GUI.DragWindow(new Rect(0,0,Screen.width,Screen.height));
        }

     5、字体

      Unity支持所有.ttf的字符集,默认的字体为Arial[ə'rɪəl]角,輻數

      打开C:WindowsFonts 找到你需要的字体拖动到Unity当前工程资源下即可。

    6、中文显示

      默认是不支持中文的,可以把编码方式改成UTF-8 如果不行就改成UTf-16


    作者:PEPE
    出处:http://pepe.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    P2P技术简介(包括BT软件的分析)(转)
    为什么BT网络中迅雷的速度会这么快,比其它BT软件快
    迅雷中几个概念
    BT中的磁力链接(转)
    eclipse代码不能自动提示的问题解决
    eclipse不会自动编译的问题解决
    BT网络中DHT和UPnp的解释(转)
    BT服务器的搭建(tracker-P2P服务器架设)(转)
    BT原理分析(转)
    BT种子文件文件结构分析(转)
  • 原文地址:https://www.cnblogs.com/PEPE/p/3490347.html
Copyright © 2011-2022 走看看