美文网首页游戏开发
Unity3D插件之NGUI核心 UI 组件和功能详细使用步骤

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

作者: TonyWan_AR | 来源:发表于2017-03-29 11:15 被阅读3001次

    一、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:子物体   
        }
        
        
    }
    

    相关文章

      网友评论

        本文标题:Unity3D插件之NGUI核心 UI 组件和功能详细使用步骤

        本文链接:https://www.haomeiwen.com/subject/tbreottx.html