Unity3D基础--常用的GUI控件

来源:互联网 发布:如何学英语 知乎 编辑:程序博客网 时间:2024/04/27 10:20

       Unity3D中的GUI部分是每帧擦除重绘的,只应该在OnGUI中绘制GUI,每一次在OnGUI方法中声明的变量值都不会保存下来,例如,在Unity中画一个文本编辑框可以调用如下代码:GUILayout.TextField("text");但是运行后会发现,不论我们输入什么都还是只会显示text字符串。这是因为:我们在上一帧中输入的字符串没有被保存,在下一帧中会全部擦除重绘,即重新绘制一个"text"字符串。解决方法:我们可以在该类的成员变量中保存下来输入值,在Start方法中进行初始化 text = GUILayout.TextField(text);接下来介绍几个比较常用的控件。

      1.按钮:GUILayout.Button("Hello");该方法返回一个布尔类型值,只有在按下Button抬起的时候返回true,在按下的过程中仍然返回false。

      2.重复按钮:GUILayout.RepeatButton("Hello");与Button不同的时,该方法只要是我们按下Button期间会一直返回true,适合做子弹反射按钮。

      3.密码框:pwd = GUILayout.PasswordField(pwd,‘*’),第二个参数为掩码字符。

      4.Tab页: selectedToolBarId = GUILayout.Toolbar(selectedToolBarId,new string[]{“Tab1”,“Tab2”,“Tab3”}); 返回值为激活的按钮的序号。根据得到标签序号,我们可以绘制相应的Tab页。

using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {private int selectedToolBarId;// Use this for initializationvoid Start () {selectedToolBarId = 0;}// Update is called once per framevoid Update () {}void OnGUI(){selectedToolBarId = GUILayout.Toolbar(selectedToolBarId,new string[]{"Tab1", "Tab2", "Tab3"});switch(selectedToolBarId){case 0:GUILayout.Label("selected tab1");//在这里绘制Tab1中的内容break;case 1:GUILayout.Label("selected tab2");//在这里绘制Tab2中的内容break;case 2:GUILayout.Label("selected tab3");//在这里绘制Tab3中的内容break;}}}
       5.单选框Toggle,返回布尔值表示当前选中的情况。
if (isMuted) {isMuted = GUILayout.Toggle(isMuted, "Yes");} else {isMuted = GUILayout.Toggle(isMuted, "No");}
        6.滑动条:纵向, sliderValue = GUILayout.VerticalSlider(sliderValue,0,100);返回值为当前值,第二个参数为最小值,第三个为最大值。 HorizontalSlider()横向。

        7.区域Area,相当于一个控件的盒子, Area中的控件跟着Area移动, BeginArea()开始一个区域,参数指定区域的大小和坐标, EndArea()结束区域;

GUILayout.BeginArea (new Rect (50, 50, 100, 100));GUILayout.Label("Area");GUILayout.EndArea ();
        8.窗口,区域是没有边框和标题的,也不可以拖放。 GUILayout.Window(0, new Rect(50,50,200,200),AddWindow1,“我的窗口”);  第一个参数为窗口的编号,第二个为窗口大小,第三个为void WindowFunction(int windowId)委托,用来绘制窗口内容。

          窗口拖拽,在WindowFunction的最后调用GUI.DragWindow()可以启用全屏拖放(给DragWindow传Rect参数可以设定可拖放的区域)。考虑帧刷新的问题,要在OnGUI把Window()的返回Rect保存才可以可拖动,Start()中设定初始位置。

using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {private Rect positionRect;// Use this for initializationvoid Start () {positionRect = new Rect (50, 50, 200, 150);}// Update is called once per framevoid Update () {}void OnGUI(){positionRect =  GUILayout.Window(0, positionRect, WinFunc1, "Title");}void WinFunc1(int id){GUILayout.Button("WinButton");GUILayout.Label ("WinLabel");GUI.DragWindow();}}








0 0
原创粉丝点击