unity3D游戏开发十五之NGUI二

来源:互联网 发布:ib网络 跟以太网区别 编辑:程序博客网 时间:2024/05/02 21:37

接下来我们讲解下UILabel,UILabel是用来显示文本的脚本,继承自UIWidget。我们创建一个label,属性如下图:


所有的label都需要Font才可正常工作。这个字体可以使Dynamic的(引用Unity Font),也可以是Bitmap字体——嵌入到Atlas里面的字体。动态字体更稳固因为它不需要你预先创建符号,但是Bitmap字体可以和你atlas的其他东西渲染在同一个draw call上并且这些字体可以通过photoshop美化。

修改Pivot来改变label的对齐方式。Top-left、Left和Bottom-left是左对齐。Top、Center或者Bottom是中间对齐。Top-right、Right、Bottom-right是右对齐。

使用Dynamic字体的时候,你可以设置label的Font Sizestyle。你也可以设置一个material用来渲染。

接下来的大框——你可能猜到了——用来输入文本。默认是多行文本输入,除非通过下面的Max Lines属性限制。

Overflow操作让你决定lable的文本超过允许的空间之后的处理方法。


  • Shrink Content 内容自动缩放。与Keep Crisp设置一起来控制Dynamic字体,使字体的字号变小而不是简单的缩放。这样不管label是否被缩放都能保持清晰。
  • Clamp Content 剔除多余的文本。
  • Resize Freely 根据输入的文本内容自动调整dimension。不需要手动调整。
  • Resize Height 保持宽度不变,必要时增加高度。
Spacing属性控制字符间距。正负皆可。像素为单位。

前面提到的Max Lines用来控制最多要多少行。用0表示不限制。

关掉Encoding表示不需要颜色和表情标签。默认启用。

可以给label提供渐变通过Gradient的bottom和top颜色。如下图:


文本可以有shadow或者outlineEffect。shadow会使用两倍的geometry,outline会使用五倍——所以要小心这个属性。Distance参数控制shadow或者outline与原文本的距离,以像素为单位。


接下来我们讲解UISprite,UISprite是NGUI里面最实用的。使用atlas纹理的一部份用来绘制sprite,继承UIWidget的所有功能,属性如下图:


  • sprite首先需要一个Atlas。点击Atals按钮会列出当前项目中已有的atlas。创建新的atlas要通过Atlas Maker工具(NGUI -> Open -> Atlas Maker)。
  • 你可以点击Sprite选择按钮旁边的Edit按钮来编辑选择的sprite。这里允许给sprite增加用来调整9-sliced的边界。
  • 默认情况下,新加的sprite会是Simple类型。意味着他们和UITextures的显示效果差不多,除了他们是来自atlas。
  • Sprite TypeFilled,这样可以做一个类似冷却的进度条。
  • Sprite TypeTiled,这样你的sprite会重复的填充一块区域。尽量不要用太小的sprite因为这样会创建很多的三角形。给你的sprite一个1像素的border也是个好主意,这一个像素会被排除掉(所有tiled的图的边缘看起来就衔接起来一样)。
  • Sprite TypeSliced就可以创建一个9-slicing的sprite。只有指定了Border后它才会真正起作用。(点击上面提到的Edit按钮)。sliced sprite的一个应用就是做按钮的背景。
使用”Make Pixel-Perfect“选项(新版本是Snap)来让UISprite 使用它的原始尺寸。就是如果你的原始texture是300*200的像素,UISprite的dimensions对应的width和height就会调整到这个数值。 注意这个对Tiled和Sliced sprite没有效果——它们有自己的规则。

接下来我们了解下UIButton,Button是一个非常简单的组件,有以下功能:接收hover、pressed、click事件,修改指定的sprite颜色。Image Button组件可以和Button同时加到一个game object上,Image Button用来切换sprite。 我们新建一个Button,它主要包含一个background的Sprite和一个label,如下图:


属性如下图:


我们在Background这个sprite中指定一个纹理图片,然后修改Widget中Color的颜色,然后修改Label的文字内容,颜色等,如下图:


我们来看看button的监听事件,第一种方法是:我们新建一个脚本,代码如下:

[csharp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. void OnClick()  
  2. {  
  3.   
  4.   
  5.   
  6.     Debug.Log("------test");  
  7.   
  8.   
  9. }  
然后直接绑定到button上,当我们点击的时候,会打印出log的内容

第二种方法是使用SendMessage,选择按钮后,在Unity导航菜单栏中选择Component->Interaction->Button Message 组件

Target:接收按钮消息的游戏对象

Function Name:接收按钮消息的方法,拥有这个方法的脚本必须绑定在上面Target对象身上

Trigger:触发的事件,OnClick显然是一次点击

Include Children :是否让该对象的所有子对象也发送这个点击事件

设置一个空对象,将所有的消息写在一个脚本中,赋值给空对象,给控件添加UIButton Message组件,将空对象拉入组件的Target,选择相应的Function Name(比如OnClick函数)即可。对于多个按钮来说,只需添加UIButton Message组件,选择相应的函数即可实现,如下图:


第三种方法是使用UIListener,这个也是推荐大家使用的一种方法,选择按钮后在Unity导航菜单栏中选择Component->NGUI->Internal ->Event Listener 。 挂在按钮上就可以,它没有任何参数,如下图:


我们修改Test脚本代码,如下:

[csharp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. void Awake ()  
  2.     {  
  3.   
  4.         Debug.Log("----111");  
  5.         //获取需要监听的按钮对象  
  6.         GameObject button=GameObject.Find("UI Root (2D)/Camera/Anchor/Panel/Button");  
  7.         //设置这个按钮的监听,指向本类的ButtonClick方法中  
  8.         UIEventListener.Get(button).onClick=buttonClick;  
  9.   
  10.     }  
  11.   
  12.   
  13.     // Use this for initialization  
  14.     void Start ()   
  15.     {  
  16.       
  17.   
  18.   
  19.     }  
  20.       
  21.     // Update is called once per frame  
  22.     void Update () {  
  23.       
  24.     }  
  25.   
  26.   
  27.   
  28.     void buttonClick(GameObject button)  
  29.     {  
  30.   
  31.   
  32.   
  33.         Debug.Log("GameObject:"+button.name);  
  34.   
  35.   
  36.     }  

然后直接绑定到button上,当我们点击的时候,会打印出log的内容

接下来我们了解下UIInput,一个输入框,就像textfield一样,它的结构也像button一样,一个backgroud和一个label,如下图:

我们看下它的属性,如下图:

Label:文本显示在哪个UILabel里

Starting Value:输入框开始显示的字

Saved As:保存输入内容到prefabs中

Active TextColor:激活文本框后显示颜色

Inactive Color:默认状态颜色

Caret Color:插入字符状态颜色

Selection Color:选择状态中字符的颜色

Input Type:输入类型(standard)标准的,(AutoCorrect)自动修正,(Password)密码

Validation:输入类型限制

Character Limit:输入字符数限制

On Submit:输入完后进行事件分发

我们新建一个input,如下图:


0 0