GUI 都是通过OnGUI函数实现的
标签控件向用户显示某些信息,不能交互。直接声明内容即可。
工具条控件
以上的矩形位置-》手动定位
GUI Skin & 自定义风格组件
GUIStyle
GUISkin
GUILayout控件
动态窗口控件
Unity把GUI的控件的创建和控件的事件的触发以及执行 整合在一起
OnGUI函数负责所有与GUI相关的处理,在OnGUI中有函数则在每一帧执行。
Button
#pragma strictfunction Start ( ) {}function Update ( ) {}
function OnGUI ( ) {
if (GUI.Button(Rect(10,10,120,100),"Unity Button"))//定义控件位置(左上角,宽度,高度) 同时控件内容(文本或图片影像){
print( "用户单击了Button");//对按钮的单击事件进行反应
}
}
闪烁按钮if ( (Time.time%2)<1) // 按钮每隔一秒显示一次(闪烁){
if(GUI.Button(Rect(10,10,120,100),"Unity Button")){
print("用户点击了按钮");//按钮显示了才可以点击
}
}
图片按钮#pragma strictvar image : Texture2D; //定义纹理变量function OnGUI ( ) {
if (GUI.Button(Rect(10,10,120,100),image)) //使用自变量,且为此赋值//if (GUI.Button(Rect(10,10,120,100), GUIContent("我的Button",image))) //文字+图片///if (GUI.Button(Rect(10,10,120,100), GUIContent("我的Button",“This is a button”))) //文字+鼠标移动到此的提示{
print( "用户单击了Button");//对按钮的单击事件进行反应
}///GUI.Label (Rect(10,120,100,20),GUI.tooltip); //GUI工具提示
}
标签控件向用户显示某些信息,不能交互。直接声明内容即可。
e.g.GUI.Label(Rect(25,25,100,30),"This is a label");
按钮控件 显示信息,典型交互性控件。
声明语句定义在If语句中,点击后执行的语句放置在if语句体中。
RepeatButton 当鼠标左键按下并保持时,if语句中保持持续执行,直到释放鼠标后才停止执行。
文本输入框
e.g.#pragma strictvar text : String ;function OnGUI() {
text = GUI.TextField(Rect(140,130,100,40),text);//输入后返回
}
开关控件
水平滑块或竖直滑块e.g.#pragma strictvar toggleBool = true; //要么开要么关function OnGUI ( ) {toggleBool = GUI.Toggle (Rect(140,170,100,30), toggleBool, "Toggle");}
e.g.
#pragma strict
var hSlideValue : float = 0.0 ; //引用或保存滑块位置
function OnGUI ( ) {
hSlideValue = GUI.HorizontalSlider(Rect(140,210,100,30), hSlideValue, 0 , 10);//保持滑块在滑动条上的输出值。//定义位置,滑块位置变量, 开始和结束位置代表的浮点数值toggleBool = GUI.Toggle (Rect(10* hSlideValue ,170,100,30), toggleBool, "Toggle");
}
工具条控件
e.g.#pragma strictvar toolbarInt = 0;//记录工具栏的当前哪一个按钮被激活,0为第一个按钮(可以初始化),跟踪按钮单击状态var toolbarStrings : String [] = ["Toolbar1", " Toolbar2 ", " Toolbar3 "];//定义按钮的数量以及显示信息
function OnGUI ( ) {
toolbarInt = GUI.Toolbar ( Rect (140, 25, 250, 30), toolbarInt, toolbarStrings);//记录工具条的返回值
}
选择网格控件
类似多行工具条控件
e.g.#pragma strictvar selectionGridInt : int = 0;//记录状态并且跟踪var selectionStrings : String[] = ["Grid 1", "Grid 2", "Grid 3", "Grid 4", "Grid 5" ];function OnGUI ( ) {
selectionGridInt = GUI.SectionGrid ( Rect (140, 25, 250, 30), selectionGridInt, selectionStrings, 2);//第四个参数为选择网络控件的列数(自动缩放)
}
控件发生了更新,检测返回bool值
function OnGUI () {
if(GUI.changed){
print("某些控件发生更新");
if(toolbarInt == 0)
print ("工具条的第一个按钮被点击");
}
}
以上的矩形位置-》手动定位
自动定位控件 --》 GUILayout
e.g.function OnGUI ( ) {
GUILayout.Button("This is a GUILayout Button");//尺寸按照文字内容自动定义位置
}
群组视图控件
相当于一个容器容纳所有控件(控件相对于组的位置定位)
在组中的控件,必须定义在组的声明内
function OnGUI ( ) {
GUI.BeginGroup(Rect(20,30,200,100)); //可以把组看成一个大控件// GUI.BeginGroup(Rect(Screen.width/2 - 50, Screen.height/2 -50,500,500));…………//其他组中的控件的定义GUI.EndGroup();
}
使用组时,同时可以使用组的嵌套
//通过此实现能量条
GUI Skin & 自定义风格组件
e.g.#pragma strictfunction OnGUI ( ) {
GUI.Buttion(Rect(10,10,180,20),"This is a Button","toggle");//按钮,外观显示是开关控件的风格GUI.Label( Rect (0,0,200,100), "This is a Label with box style", "box");
}
e.g.
#pragma strictvar buttonStyle : GUIStyle;function OnGUI ( ) {GUI.Buttion(Rect(10,10,180,20),"This is a Button",buttonStyle);}在属性编辑器中编辑GUIStyle
GUISkin
多个GUIStyle组合集中使用
创建一个GUISkin
e.g.#pragma strictvar mySkin :GUISkinfunction OnGUI ( ) {
GUI.skin = mySkin;GUI.Buttion(Rect(10,10,180,20),"This is a Button with skin");GUI.skin = null;GUI.Buttion(Rect(10,60,180,20),"This is a Button with default skin");
}
GUILayout控件
e.g.#pragma strictfunction Start() {}function Update(){}function OnGUI(){GUILayout.BeginArea(Rect(Screen.width/2,Screen.height/2,500,500)); //相当于一个容器GUILayout.BeginHorizontal(); //控件在水平方向自动排列GUILayout.Button("This is a GUILayout Button");GUILayout.Button("This is a another GUILayout Button");
GUILayout.BeginVertical();//垂直布局GUILayout.Box("This is a GUILayout Box");GUILayout.Space(120);//间距sliderValue = GUILayout.HorizontalSlider(sliderValue,0.0,10.0, GUILayout.Width(100)//定义控件的长度);GUILayout.EndVertical();
GUILayout.EndArea();GUILayout.EndHorizontal();
}
动态窗口控件
使用回调函数来实现功能
e.g.
#pragma strict
var windowShoworNot: boolean = true ;
var windowRect : Rect = Rect (20,20120,50);
//窗口可以拖动的,接受位置变量
function OnGUI ( ) {
windowShoworNot = GUI.Toggle(Rect(10,100,20),windowShoworNot,"显示与否");//接收状态if(windowShoworNot){ //点击了才能显示
windowRect = GUI.Window(0,windowRect,MyWindowFunction,"My Window" );
//变量接收窗口的位置,
}//ID,位置&尺寸,窗口回调函数,窗口名称
}
function MyWindowFunction (windowID : int ) {
if(GUI.Button(Rect(10,10,100,20),"Button in Window"))
GUI.DragWindow(Rect(0,0,10000,10000));//拖动窗口(范围)print("Click the button in the window.");
}