资源描述:
《Unity3d-GUI入门》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、这一段将解释UnityGUI控制所需的脚本。UnityGUI控制 UnityGUI控制是利用一类被称为OnGUI()的函数,只要在控制脚本激活的状态下,OnGUI()函数可以在每帧调用,就像Update()函数一样。 GUI控制在结构上相当简单,这种结构在下面这个例子中十分明显:/*Examplelevelloader*/functionOnGUI(){//MakeabackgroundboxGUI.Box(Rect(10,10,100,90),"LoaderMenu");//Makethefirstbu
2、tton.Ifitispressed,Application.Loadlevel(1)willbeexecutedif(GUI.Button(Rect(20,40,80,20),"Level1")){Application.LoadLevel(1);}//Makethesecondbutton.if(GUI.Button(Rect(20,70,80,20),"Level2")){Application.LoadLevel(2);}} 这个例子是一个完整的,功能层的装载,如果你把这段脚本复制粘贴到GameOb
3、ject上,在Play模式下你将会看到如下的菜单出现。 这个装载菜单是由例子中的代码创建的。 下面让我们看一下这个例子中代码的细节: 在GUI的第一行中,GUI.BOX(Rect(10,10,100,90),”LoaderMenu”);通过头文本“LoaderMenu”显示一个Box控制,它通过一个典型的GUI控制定义,这样我们可以在第一时间解释。 在GUI的下一行中是一个Button控制定义,要注意它与BOX控制之间细微的差别。确切的说,整个Button定义放置在一个if语句中。当游戏在运行中并且按
4、钮按下,if语句返回一个true,并且if中的代码被执行。 当OnGUI()代码在每一帧被调用的时候,你不必明确的创建或去除GUI控制,定义控制的代码同时也创建了它。如果你需要在一个特定的时间显示控制,你可以利用任何一种描述逻辑来做。/*Flashingbuttonexample*/functionOnGUI(){if(Time.time%2<1){if(GUI.Button(Rect(10,10,200,20),"Meettheflashingbutton")){print("Youclickedme!"
5、);}}} 这里,GUI.Button()只有在其它时间上才会被调用,所以按钮会出现或消失,自然地,用户只有在在按钮可见的情况下才能按下它。 就像你所看见的,当GUI控制显示和工作时,你可以利用任何希望的逻辑去控制。现在,我们来详细的研究每个控制定义。AnatomyofaControl(控制的解剖) 当GUI控制定义时,这里有三种关键信息:Type(Position,Content) 很明显这种结构是一个函数有两个内容来描述,下面我们解释这种结构的细节。Type Type是一种控制类型,通过调用Un
6、ity的GUIclass或者是GUILayoutClass函数来定义,只有在布局模式中讨论长度才会用到。例如,GUI.Label()将会创建一个非交互的标签。所有不同的控制类型会在后面解释,在导读的控制部分。Position Position是第一个需要描述的GUI函数,它通过提供Rect()函数来描述自己,Rect()定义四种工具,最左端位置,最上端位置,总宽度和总高度。所有的值只能是整数,相当于像素值。所有的UnityGUI控制工作在屏幕空间,发布的播放窗口的像素分辨率。 坐标系以左上为基础,Rect
7、(10,20,300,100)定义一个矩形:10,20的位置开始,310,120的位置结束。Rect函数后面两个整数是定义的总宽和总高,而不是绝对位置上的宽和高,这就是为什么例子上提到的是310,120而不是300,100. 你可以利用屏幕宽度和屏幕高度工具得到总的屏幕播放器尺寸,下面这个例子将帮助我们清楚它是怎么工作的:/*Screen.width&Screen.heightexample*/functionOnGUI(){GUI.Box(Rect(0,0,100,50),"Top-left");GUI.
8、Box(Rect(Screen.width-100,0,100,50),"Top-right");GUI.Box(Rect(0,Screen.height-50,100,50),"Bottom-right");GUI.Box(Rect(Screen.width-100,Screen.height-50,100,50),"Bottom-left");} 这个盒子位置就是上面的例子Content G