Unity3D插件之NGUI核心 UI 组件和功能详细使用步骤

一、NGUI 介绍

1.NGUI 插件安装

首先创建一个新的 Unity 工程项目,导入 NGUI 插件资源包。

导入 NGUI 后,Unity 的菜单栏会出现一个“NGUI”菜单,这个菜单包含了

NGUI 所有的操作功能。

2.NGUI 插件目录结构

Editor:编辑器扩展

Examples:示例工程

Resources:资源文件

Scripts:脚本组件

[Unity 是基于组件形式的引擎,任何功能都是一个独立的组件;

组件其实就是一个类,一个对象,一个脚本文件;

NGUI 中所有的 UI 也都是通过组件的形式体现的。]

二、NGUI 基本使用方法

1.NGUI Bug 修复

Bug 出现的环境:Unity5.4.1 + NGUI3.10.0

Bug 信息:Ignoring menu item NGUI because it is in no submenu!

修复步骤:

①找到并打开 NGUI 插件中的“NGUIMenu.cs”脚本文件;

②将 715,716 两行代码注释或者删掉;

③保存修改后的脚本,并重启 Unity 开发环境。

2.使用 NGUI 显示文字

1.简单思考

之前我们想显示一个简单的 3D 模型,我们可以创建一个 Cube 物体。

那么我们想显示文字,那么需要创建什么哪?而且我们使用的是 NGUI?

和文字沾边的单词有 Text 和 Lable。

操作步骤:

NGUI-->Create-->Label 创建一个用于显示文字的“游戏物体”。

切换到 Game 面板,我们就可以看到“New Label”。

2.NGUI 层次结构

UI Root(所有的 NGUI 元素都是这个的子物体)

|---Camera(用于渲染 NGUI 的摄像机)

|---Lable(Lable 游戏物体)

|---More UI(更多的 UI 游戏物体)

3.NGUI 操作细节

①在 Scene 视图“紫色”的矩形,就是我们 NGUI 的操作范围,其实也就是

UI Root 的范围(鼠标选中 UI Root,这个矩形区域会高亮显示)。

②我们可以点击 Scene 视图上方的“2D”按钮,切换到 2D 编辑模式。

③在 2D 模式下,鼠标选中 UI Root,紫色矩形也会高亮,现在将鼠标放到矩

形上,点击鼠标右键,会出现 NGUI 的操作菜单,这个菜单我们后期会大量且

频繁的使用。

④摄像机的图标会影响到我们的操作,可以将这个图标调小。

点击 Scene 面板右上角 Gizmos,3D Icons 选项,调小即可。

3.Prefab Toolbar

1.打开 Prefab Toolbar

NGUI-->Open-->Prefab Toolbar

2.Prefab Toolbar 简介

Prefab Toolbar :(NGUI)预制体工具栏,其实就是 NGUI 提供的一些现成

的 UI 功能元素的预制体文件,我们可以直接鼠标单击选中,然后往 Scene 面板拖拽。

三、基本组件之 UILabel 面板控制

1.字体文件

1.字体图集

将所用到的文字处理成一张图片进行使用,这种比较适合英语国家。

2.TTF 字体

直接使用 TTF 格式的字体进行文字显示。

2.UILabel 面板属性

1.Font Size(字体大小)

控制文字显示的大小,以及基本样式[正常,粗体,倾斜,粗体+倾斜]

2.Text(文字)

UILable 要显示的文字,可以输入多行

3.Modifier(调节器)

控制英文显示状态,正常状态,大写状态,小写状态

4.Overflow(溢出)

当文字大小超出了 Widget 中 Size 属性的大小时,如何处理显示。

ShrinkContent:收缩内容 [再大也无效]

ClampContent:夹持内容 [能显示几个字就显示几个字]

Use Ellipsis:是否使用省略符

ResizeFreely:调整自由 [Widget 中的 Size 自动同步 Font Size]

ResizeHeight:调整高度 [宽度固定,高度自动调整]

5.Alignment(对齐方式)

设置文字的对齐方式

6.Gradient(渐变颜色)

设置文字从上到下的颜色渐变

7.Effect(特效)

设置文字特效,比如:颜色描边,投影

8.Spacing(间距)

设置文字与文字之间的间距大小

9.Color Tint(色彩化)

设置文字显示的颜色

四、基本组件之 UILabel 代码控制

1.文字展示案例

1.元宝与钱币数显示

重点设置 UILabel 的中心点,以及 Overflow 样式。

中心点水平轴向为左侧或者右侧;

Overflow 一般设置为 ResizeFreely。

2.物品描述信息

文字在一个固定区域内显示。

重点设置 UILabel 的中心点,以及对齐方式还有 Overflow 样式。

中心点设置为垂直轴向的顶部;

对齐方式为左对齐;

Overflow 为 ResizeHeight。

2.代码控制 UILabel

1.代码控制金币数

代码查找到对应的游戏对象,修改游戏对象身上的 UILabel 组件的 Text 属性。

2.代码控制物品描述

方法步骤同上

NGUI 代码中换行“\n”

五、NGUI 图片管理工具 AtlasMaker

1.AtlasMaker 制作图集

1.什么是 Atlas?

Atlas:图集,图片的一个集合,或者说打包格式。NGUI 中的 UISprite 组件

显示图片,需要用到图集,就和 UILabel 显示需要用到字体是一样的道理。

2.什么是 AtlasMaker?

AtlasMaker:图集制作器,NGUI 提供的打包 Atlas 的工具。

3.AtlasMaker 制作图集步骤

①打开 AtlasMaker 工具,点击“new”按钮;

②将需要打包成 Atlas 的图片选中;

②点击“Create”按钮,给新图集命名保存。

4.Atlas 结构分析

每一个 Atlas 都是由三个文件组成:

xxx.png:贴图文件,小图片拼接成的一张大图片

xxx.mat:材质球文件,使用 xxx.png 为素材制作的材质球

xxx.prefab:图集文件,使用 xxx.mat 为素材制作的图集文件

依赖关系:png-->mat-->prefab

2.图集常用修改操作

1.往图集中增加新图片

①打开 AtlasMarker,选中需要修改的图集;

②选中需要增加的图片,然后点击“Add/Update”按钮。

2.从图集中删除图片

①打开 AtlasMarker,选中需要修改的图集;

②点击图集中图片后面的“X”按钮,然后 Delete。

六、基本组件之 UISprite 面板控制

1.UISprite 显示图片

①创建 UISprite 组件,步骤:NGUI-->Create-->Sprite;

②选择图集,选择要显示的图片;

③Widget 中点击“Snap”按钮,让图片原始大小显示;

④Widget 中“Aspect”选中“Based On Width”,便于等比例调整图片

的大小。

2.UISprite 面板属性

1.Type(类型/模式)

Simple:简单模式 默认展示效果

Sliced:九宫模式 适合于按钮背景图处理 [演示九宫处理]

Tiled:平铺模式 使用该图片平铺 Widget 中 Size 的区域

Flip:进度模式 最复杂的一种图片模式

|---Fill Dir 填充方向

|---Fill Amount 填充量

|---Invert Fill 翻转填充

七、基本组件之 UISprite 代码控制

1.图片案例展示

1.金币元宝界面制作

导入相关的素材图片,更新图集,使用 UISprite 和 UILabel 制作界面。
2.代码控制 UISprite

1.动态创建 UISprite

分析手动添加 UISprite 时的步骤,然后使用代码还原整个步骤。

2.动态控制 UISprite 的属性

获取到当前的 UISprite 对象,以“.”的形式调出属性进行赋值,属性的名称

和 Inspecctor 面板上组件属性名基本保持一致。

八、基本组件之 UIButton 面板控制

1.UIButton 制作按钮

1.基础说明

在 UI 界面制作过程中,UILabel 用于显示文字,UISprite 用于显示图片,无

论多复杂的 UI 界面,都是由最基础的文字+图片的形式展示(制作)的。

UI 界面的主要功能有两个:1>展示数据;2>人机交互。

而最核心的交互就是点击,使用鼠标或者手指点击 UI,而能接收点击的 UI 组件

叫做 UIButton。我们可以在 UILable 和 UISprite 的基础上附加 UIButton

组件制作出我们的 UI 按钮。

2.按钮制作步骤

①首先展现一张图片或者一段文字;

②Attach-->BoxCollider,确定可以点击的区域,其实点击按钮就是这个这

个 Collider 区域进行交互的;

③Attach-->ButtonScript,附加按钮组件,按钮制作到此完成。

2.UIButton 面板属性

1.Colors 数组

使用颜色来描述按钮的四种状态。

如果不想让颜色影响图片的效果,可以将四种颜色全部选择为白色。

2.Sprites 数组

组使用图片来描述按钮的四种状态。

3.按钮四种状态

①Normal(*):默认原始状态; ②Hover:经过停留状态;

③Pressed(*):按下状态; ④Disabled:不可用状态;

九、基本组件之 UIButton 代码控制

1.按钮点击事件绑定

1.面板属性栏绑定

①创建一个代码文件,定义一个公开的方法,挂载到一个游戏物体上;

②将该脚本拖拽到 UIButton 的 OnClick 事件上(注意看我的操作演示)。

2.代码绑定

①创建一个代码文件,挂载到按钮游戏物体上;

②定义一个叫做 OnClick()的方法。

2.按钮交互声音

1.UIPlaySound 组件

当我们和按钮进行交互(比如:点击)的时候,可以播放一个点击声音,起到一

个辅助反馈的作用。

2.操作步骤

①Attach-->Play Sound Script 添加组件;

②Audio Clip 指定一个声音文件;

③指定 Trigger 触发该声音播放的事件,常用的是 OnClick。

十、UI 动态加载

1.原理介绍

在实际项目开发过程中,UI 界面制作好以后会拖拽成为一个 Prefab 资源,和

Scene 场景分离,在实际加载到该场景的时候,动态的加载显示 UI 界面。

这样可以使得 UI 和 Scene 进行分离,好处是很大的,分离后我就可以让不同

的人编辑制作不同的部分,否则的话,UI 和 Scene 在一起,多人编辑的时候,

项目是没法合并(SVN,Git)的。

2.操作演示

①将制作好的 UI 面板拖拽成为一个 Prefab 资源,放到 Resources 文件夹下;

②使用 Resources.Load()将该资源加载到内存中;

③实例化该 UI 资源对象,放到 UIRoot 下完成显示;

3.相关 API

NGUITools.AddChild(父对象, 子对象); NGUI 提供的一个实例化物体,设置子物体的一个内置函数,操作 UI 尽量使用

该 NGUI 封装的函数。

![


关键代码

CreateUISprite

using UnityEngine;
using System.Collections;

/// <summary>
/// 使用代码控制UISprite 组件
/// </summary>
public class CreateUISprite : MonoBehaviour {

    private Transform m_Transform;
    void Start () {
    
        //获取游戏物体的transform物体组件
        m_Transform=gameObject.GetComponent<Transform>();
        //实例化对象
        GameObject uiSprite = new GameObject("TonyWan");

       //设置父物体;
        uiSprite.GetComponent<Transform>().SetParent ( m_Transform);
        //重置Scale;
        uiSprite.GetComponent<Transform>().localScale = Vector3.one;

        //动态添加图集
        UISprite sprite=uiSprite.AddComponent<UISprite>();

        //读取图集 资源加载
        UIAtlas atlas=Resources.Load<UIAtlas>("GameAtlas");//参数1:表示自定义的图集名称;

        //给组件指定图集
        sprite.atlas=atlas;

        //给组件指定图片
        sprite.spriteName="11000782";
    }

MyButton

public class MyButton : MonoBehaviour {

    //第一种点击事件方法

    //定义一个公开button点击事件
    public void ButtonClick() {

        Debug.Log("我是Button按钮被点击了");
    
    }

    //第二种点击事件方法

    //代码绑定点击事件 OnCLick内置点击事件 写这个就会点击
    public void OnClick(){

        Debug.Log("我是代码绑定点击事件");
    }


}

UILabelTest

public class UILabelTest : MonoBehaviour {

    //声明一个持有引用
    private UILabel goldNumber;

    private UILabel item_Label;

    void Start()
    {
        //查找值物体
        goldNumber = GameObject.Find("goldNumber").GetComponent<UILabel>();
        //对文本进行赋值
        goldNumber.text = "123456789";
        //对字体颜色改变
        goldNumber.color = Color.green;
    }
    
    void Update () {
    
        //按下空格键 进行描述切换
        if (Input.GetKeyDown(KeyCode.Space))
        {
            item_Label=GameObject.Find("item_Label").GetComponent<UILabel>();
            item_Label.text = "TonyWanTonyWanTonyWanTonyWanTonyWan\n我要换行了!TonyWanTonyWanTonyWanTonyWanTonyWanTonyWanTonyWan";
        }

    }
}

UIManager

public class UIManager : MonoBehaviour
{
    //声明一个持有引用,用来存贮加载后的预制体
    private GameObject prefab_Info;
    void Start () {

        //存贮预制体
        prefab_Info=Resources.Load<GameObject>("Info");//泛型 GameObject 参数1:预制体的名称

        //NGUI自带API 把预制体加载到场景中去 有重载
        NGUITools.AddChild(gameObject, prefab_Info);//参数1:父物体 参数2:子物体   
    }
    
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容