首页 > 代码库 > Unity3D基础--常用的GUI控件

Unity3D基础--常用的GUI控件

       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 initialization
	void Start () {
		selectedToolBarId = 0;
	}
	
	// Update is called once per frame
	void 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 = http://www.mamicode.com/GUILayout.VerticalSlider(sliderValue,0,100);返回值为当前值,第二个参数为最小值,第三个为最大值。>

        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 initialization
	void Start () {
		positionRect = new Rect (50, 50, 200, 150);
	}
	
	// Update is called once per frame
	void Update () {
		
	}
	
	void OnGUI(){
		positionRect =  GUILayout.Window(0, positionRect, WinFunc1, "Title");
	}
	
	void WinFunc1(int id){
		GUILayout.Button("WinButton");
		GUILayout.Label ("WinLabel");
		GUI.DragWindow();
	}
}








Unity3D基础--常用的GUI控件