Unity3D GUI基础

本文介绍了Unity3D中GUI的基本概念及使用方法,包括OnGUI()函数的作用、GUI控制的结构解析、位置与内容的定义等。通过实例展示了如何创建交互式按钮并控制其显示逻辑。

Unity3D GUI基础

 from: http://www.doc88.com/p-51496278467.html
 
UnityGUI控制 
   UnityGUI 控制利用一类被称为OnGUI()的函数,只要在控制脚本激活的状态下, OnGUI()
函数可以在每帧调用,就像 Update()函数一样。 
   GUI控制在结构上相当简单,这种结构在下面这个例子中十分明显: 
 
 
function OnGUI () 
{// Make a background box 
 GUI.Box (Rect (10,10,100,90), "LoaderMenu"); 
 
 // Make the first button. If it is pressed,Application.Loadlevel (1) will be executed 
 if (GUI.Button (Rect (20,40,80,20), "Level1")) { 
  Application.LoadLevel(1); 
 
 
 // Make the secondbutton. 
 if (GUI.Button (Rect (20,70,80,20), "Level2")) { 
  Application.LoadLevel(2); 
 
  这个例子是一个完整的,功能层的装载,如果你把这段脚本复制粘贴到 GameObject上,
在 Play模式下你将会看到如下的菜单出现。  
  这个装载菜单是由例子中的代码创建的。 
  下面让我们看一下这个例子中代码的细节: 
  在 GUI 的第一行中, GUI.BOX(Rect(10,10,100,90),”LoaderMenu”);通过头文本“Loader 
Menu”显示一个 Box 控制,它通过一个典型的 GUI 控制定义,这样我们可以在第一时间解
释。 
  在 GUI 的下一行中是一个 Button 控制定义,要注意它与 BOX控制之间细微的差别。
确切的说,整个 Button 定义放置在一个 if 语句中。当游戏在运行中并且按钮按下,if 语句
返回一个 true,并且 if中的代码被执行。 
  当 OnGUI()代码在每一帧被调用的时候,你不必明确的创建或去除 GUI控制,定义控
制的代码同时也创建了它。如果你需要在一个特定的时间显示控制,你可以利用任何一种描
述逻辑来做。 
 
 
function OnGUI () { 
 if (Time.time % 2 < 1){ 
  if (GUI.Button (Rect (10,10,200,20), "Meetthe flashing button")) { 
   print ("You clickedme!"); 
 
 
 这里,GUI.Button()只有在其它时间上才会被调用,所以按钮会出现或消失,自然地,
用户只有在在按钮可见的情况下才能按下它。 
  就像你所看见的,当 GUI控制显示和工作时,你可以利用任何希望的逻辑去控制。现
在,我们来详细的研究每个控制定义。 
 Anatomy of a Control (控制的解剖) 
  当 GUI控制定义时,这里有三种关键信息: 
Type(Position,Content) 
 很明显这种结构是一个函数有两个内容来描述,下面我们解释这种结构的细节。 
Type 
   Type是一种控制类型,通过调用Unity的GUIclass或者是GUILayout Class函数来定义,
只有在布局模式中讨论长度才会用到。例如,GUI.Label()将会创建一个非交互的标签。
所有不同的控制类型会在后面解释,在导读的控制部分。 
Position 
   Position 是第一个需要描述的 GUI函数,它通过提供 Rect()函数来描述自己,Rect
()定义四种工具,最左端位置,最上端位置,总宽度和总高度。所有的值只能是整数,相
当于像素值。所有的 UnityGUI控制工作在屏幕空间,发布的播放窗口的像素分辨率。 
  坐标系以左上为基础,Rect(10,20,300,100)定义一个矩形:10,20的位置开始,
310,120 的位置结束。Rect 函数后面两个整数是定义的总宽和总高,而不是绝对位置上的
宽和高,这就是为什么例子上提到的是 310,120 而不是300,100. 
 你可以利用屏幕宽度和屏幕高度工具得到总的屏幕播放器尺寸,下面这个例子将帮助我
们清楚它是怎么工作的: 
 
 
function OnGUI () { 
 GUI.Box (Rect (0,0,100,50),"Top-left"); 
 GUI.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 
   GUI控制的第二个描述就是控制所显示的实际内容,大多数情况下你要显示一些文本或
是图片在你的控制上,显示一段文本,通过下面一段 Content 代码: 
 
 
function OnGUI () { 
 GUI.Label (Rect (0,0,100,50), "This is thetext string for a Label Control"); 
显示一副图片,定义一个 2D材质变量,通过变量的名称定义内容。 
 
 
var controlTexture : Texture2D; 
 
function OnGUI () { 
 GUI.Label (Rect (0,0,100,50),controlTexture); 
下面是一个与真实世界脚本比较接近的例子: 
 
 
var icon : Texture2D; 
 
function OnGUI () { 
 if (GUI.Button (Rect (10,10, 100, 50),icon)) { 
  print ("you clicked theicon"); 
 
 
 if (GUI.Button (Rect (10,70, 100, 20), "Thisis text")) { 
  print ("you clicked the textbutton"); 
 
}  
  这个按钮时通过上面的例子创建的 
 
  这里有第三种选择可以使你把图片和文字一起在 GUI中显示,你可以提供一个物体类
似于内容描述,并且定义一串代码和图片在 GUI 内容中显示。 
 
 
var icon : Texture2D; 
 
function OnGUI () { 
 GUI.Box (Rect (10,10,100,50),GUIContent("This is text", icon)); 
你也可以在 GUI 中定义一个 Tool tip,它可以在 GUI中你的鼠标停留的地方显示。 
 
 
function OnGUI () { 
 // This line feeds "This is the tooltip"into GUI.tooltip 
 GUI.Button (Rect (10,10,100,20), GUIContent("Click me", "This is the tooltip")); 
 // This line reads and displays the contentsof GUI.tooltip 
 GUI.Label (Rect (10,40,100,20),gui.tooltip); 
如果你敢,你一样可以利用 GUIContent 显示一串代码、一个符号或是一个tooltip 
 
 
var icon : Texture2D; 
 function OnGUI () { 
 GUI.Button (Rect (10,10,100,20), GUIContent("Click me", icon "This is the tooltip")); 
 GUI.Label (Rect (10,40,100,20),gui.tooltip); 
这段涉及到 GUIContent的结构那页,有大量的例子。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值