Unity3D插件之NGUI核心 UI 組件和功能詳細使用步驟

一、NGUI 介紹

1.NGUI 插件安裝

首先創(chuàng)建一個新的 Unity 工程項目,導(dǎo)入 NGUI 插件資源包。

導(dǎo)入 NGUI 后,Unity 的菜單欄會出現(xiàn)一個“NGUI”菜單,這個菜單包含了

NGUI 所有的操作功能。

2.NGUI 插件目錄結(jié)構(gòu)

Editor:編輯器擴展

Examples:示例工程

Resources:資源文件

Scripts:腳本組件

[Unity 是基于組件形式的引擎,任何功能都是一個獨立的組件;

組件其實就是一個類,一個對象,一個腳本文件;

NGUI 中所有的 UI 也都是通過組件的形式體現(xiàn)的。]

二、NGUI 基本使用方法

1.NGUI Bug 修復(fù)

Bug 出現(xiàn)的環(huán)境:Unity5.4.1 + NGUI3.10.0

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

修復(fù)步驟:

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

②將 715,716 兩行代碼注釋或者刪掉;

③保存修改后的腳本,并重啟 Unity 開發(fā)環(huán)境。

2.使用 NGUI 顯示文字

1.簡單思考

之前我們想顯示一個簡單的 3D 模型,我們可以創(chuàng)建一個 Cube 物體。

那么我們想顯示文字,那么需要創(chuàng)建什么哪?而且我們使用的是 NGUI?

和文字沾邊的單詞有 Text 和 Lable。

操作步驟:

NGUI-->Create-->Label 創(chuàng)建一個用于顯示文字的“游戲物體”。

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

2.NGUI 層次結(jié)構(gòu)

UI Root(所有的 NGUI 元素都是這個的子物體)

|---Camera(用于渲染 NGUI 的攝像機)

|---Lable(Lable 游戲物體)

|---More UI(更多的 UI 游戲物體)

3.NGUI 操作細節(jié)

①在 Scene 視圖“紫色”的矩形,就是我們 NGUI 的操作范圍,其實也就是

UI Root 的范圍(鼠標(biāo)選中 UI Root,這個矩形區(qū)域會高亮顯示)。

②我們可以點擊 Scene 視圖上方的“2D”按鈕,切換到 2D 編輯模式。

③在 2D 模式下,鼠標(biāo)選中 UI Root,紫色矩形也會高亮,現(xiàn)在將鼠標(biāo)放到矩

形上,點擊鼠標(biāo)右鍵,會出現(xiàn) NGUI 的操作菜單,這個菜單我們后期會大量且

頻繁的使用。

④攝像機的圖標(biāo)會影響到我們的操作,可以將這個圖標(biāo)調(diào)小。

點擊 Scene 面板右上角 Gizmos,3D Icons 選項,調(diào)小即可。

3.Prefab Toolbar

1.打開 Prefab Toolbar

NGUI-->Open-->Prefab Toolbar

2.Prefab Toolbar 簡介

Prefab Toolbar :(NGUI)預(yù)制體工具欄,其實就是 NGUI 提供的一些現(xiàn)成

的 UI 功能元素的預(yù)制體文件,我們可以直接鼠標(biāo)單擊選中,然后往 Scene 面板拖拽。

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

1.字體文件

1.字體圖集

將所用到的文字處理成一張圖片進行使用,這種比較適合英語國家。

2.TTF 字體

直接使用 TTF 格式的字體進行文字顯示。

2.UILabel 面板屬性

1.Font Size(字體大?。?/p>

控制文字顯示的大小,以及基本樣式[正常,粗體,傾斜,粗體+傾斜]

2.Text(文字)

UILable 要顯示的文字,可以輸入多行

3.Modifier(調(diào)節(jié)器)

控制英文顯示狀態(tài),正常狀態(tài),大寫狀態(tài),小寫狀態(tài)

4.Overflow(溢出)

當(dāng)文字大小超出了 Widget 中 Size 屬性的大小時,如何處理顯示。

ShrinkContent:收縮內(nèi)容 [再大也無效]

ClampContent:夾持內(nèi)容 [能顯示幾個字就顯示幾個字]

Use Ellipsis:是否使用省略符

ResizeFreely:調(diào)整自由 [Widget 中的 Size 自動同步 Font Size]

ResizeHeight:調(diào)整高度 [寬度固定,高度自動調(diào)整]

5.Alignment(對齊方式)

設(shè)置文字的對齊方式

6.Gradient(漸變顏色)

設(shè)置文字從上到下的顏色漸變

7.Effect(特效)

設(shè)置文字特效,比如:顏色描邊,投影

8.Spacing(間距)

設(shè)置文字與文字之間的間距大小

9.Color Tint(色彩化)

設(shè)置文字顯示的顏色

四、基本組件之 UILabel 代碼控制

1.文字展示案例

1.元寶與錢幣數(shù)顯示

重點設(shè)置 UILabel 的中心點,以及 Overflow 樣式。

中心點水平軸向為左側(cè)或者右側(cè);

Overflow 一般設(shè)置為 ResizeFreely。

2.物品描述信息

文字在一個固定區(qū)域內(nèi)顯示。

重點設(shè)置 UILabel 的中心點,以及對齊方式還有 Overflow 樣式。

中心點設(shè)置為垂直軸向的頂部;

對齊方式為左對齊;

Overflow 為 ResizeHeight。

2.代碼控制 UILabel

1.代碼控制金幣數(shù)

代碼查找到對應(yīng)的游戲?qū)ο?,修改游戲?qū)ο笊砩系?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 結(jié)構(gòu)分析

每一個 Atlas 都是由三個文件組成:

xxx.png:貼圖文件,小圖片拼接成的一張大圖片

xxx.mat:材質(zhì)球文件,使用 xxx.png 為素材制作的材質(zhì)球

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

依賴關(guān)系:png-->mat-->prefab

2.圖集常用修改操作

1.往圖集中增加新圖片

①打開 AtlasMarker,選中需要修改的圖集;

②選中需要增加的圖片,然后點擊“Add/Update”按鈕。

2.從圖集中刪除圖片

①打開 AtlasMarker,選中需要修改的圖集;

②點擊圖集中圖片后面的“X”按鈕,然后 Delete。

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

1.UISprite 顯示圖片

①創(chuàng)建 UISprite 組件,步驟:NGUI-->Create-->Sprite;

②選擇圖集,選擇要顯示的圖片;

③Widget 中點擊“Snap”按鈕,讓圖片原始大小顯示;

④Widget 中“Aspect”選中“Based On Width”,便于等比例調(diào)整圖片

的大小。

2.UISprite 面板屬性

1.Type(類型/模式)

Simple:簡單模式 默認展示效果

Sliced:九宮模式 適合于按鈕背景圖處理 [演示九宮處理]

Tiled:平鋪模式 使用該圖片平鋪 Widget 中 Size 的區(qū)域

Flip:進度模式 最復(fù)雜的一種圖片模式

|---Fill Dir 填充方向

|---Fill Amount 填充量

|---Invert Fill 翻轉(zhuǎn)填充

七、基本組件之 UISprite 代碼控制

1.圖片案例展示

1.金幣元寶界面制作

導(dǎo)入相關(guān)的素材圖片,更新圖集,使用 UISprite 和 UILabel 制作界面。
2.代碼控制 UISprite

1.動態(tài)創(chuàng)建 UISprite

分析手動添加 UISprite 時的步驟,然后使用代碼還原整個步驟。

2.動態(tài)控制 UISprite 的屬性

獲取到當(dāng)前的 UISprite 對象,以“.”的形式調(diào)出屬性進行賦值,屬性的名稱

和 Inspecctor 面板上組件屬性名基本保持一致。

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

1.UIButton 制作按鈕

1.基礎(chǔ)說明

在 UI 界面制作過程中,UILabel 用于顯示文字,UISprite 用于顯示圖片,無

論多復(fù)雜的 UI 界面,都是由最基礎(chǔ)的文字+圖片的形式展示(制作)的。

UI 界面的主要功能有兩個:1>展示數(shù)據(jù);2>人機交互。

而最核心的交互就是點擊,使用鼠標(biāo)或者手指點擊 UI,而能接收點擊的 UI 組件

叫做 UIButton。我們可以在 UILable 和 UISprite 的基礎(chǔ)上附加 UIButton

組件制作出我們的 UI 按鈕。

2.按鈕制作步驟

①首先展現(xiàn)一張圖片或者一段文字;

②Attach-->BoxCollider,確定可以點擊的區(qū)域,其實點擊按鈕就是這個這

個 Collider 區(qū)域進行交互的;

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

2.UIButton 面板屬性

1.Colors 數(shù)組

使用顏色來描述按鈕的四種狀態(tài)。

如果不想讓顏色影響圖片的效果,可以將四種顏色全部選擇為白色。

2.Sprites 數(shù)組

組使用圖片來描述按鈕的四種狀態(tài)。

3.按鈕四種狀態(tài)

①Normal(*):默認原始狀態(tài); ②Hover:經(jīng)過停留狀態(tài);

③Pressed(*):按下狀態(tài); ④Disabled:不可用狀態(tài);

九、基本組件之 UIButton 代碼控制

1.按鈕點擊事件綁定

1.面板屬性欄綁定

①創(chuàng)建一個代碼文件,定義一個公開的方法,掛載到一個游戲物體上;

②將該腳本拖拽到 UIButton 的 OnClick 事件上(注意看我的操作演示)。

2.代碼綁定

①創(chuàng)建一個代碼文件,掛載到按鈕游戲物體上;

②定義一個叫做 OnClick()的方法。

2.按鈕交互聲音

1.UIPlaySound 組件

當(dāng)我們和按鈕進行交互(比如:點擊)的時候,可以播放一個點擊聲音,起到一

個輔助反饋的作用。

2.操作步驟

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

②Audio Clip 指定一個聲音文件;

③指定 Trigger 觸發(fā)該聲音播放的事件,常用的是 OnClick。

十、UI 動態(tài)加載

1.原理介紹

在實際項目開發(fā)過程中,UI 界面制作好以后會拖拽成為一個 Prefab 資源,和

Scene 場景分離,在實際加載到該場景的時候,動態(tài)的加載顯示 UI 界面。

這樣可以使得 UI 和 Scene 進行分離,好處是很大的,分離后我就可以讓不同

的人編輯制作不同的部分,否則的話,UI 和 Scene 在一起,多人編輯的時候,

項目是沒法合并(SVN,Git)的。

2.操作演示

①將制作好的 UI 面板拖拽成為一個 Prefab 資源,放到 Resources 文件夾下;

②使用 Resources.Load()將該資源加載到內(nèi)存中;

③實例化該 UI 資源對象,放到 UIRoot 下完成顯示;

3.相關(guān) API

NGUITools.AddChild(父對象, 子對象); NGUI 提供的一個實例化物體,設(shè)置子物體的一個內(nèi)置函數(shù),操作 UI 盡量使用

該 NGUI 封裝的函數(shù)。

![


關(guān)鍵代碼

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");

       //設(shè)置父物體;
        uiSprite.GetComponent<Transform>().SetParent ( m_Transform);
        //重置Scale;
        uiSprite.GetComponent<Transform>().localScale = Vector3.one;

        //動態(tài)添加圖集
        UISprite sprite=uiSprite.AddComponent<UISprite>();

        //讀取圖集 資源加載
        UIAtlas atlas=Resources.Load<UIAtlas>("GameAtlas");//參數(shù)1:表示自定義的圖集名稱;

        //給組件指定圖集
        sprite.atlas=atlas;

        //給組件指定圖片
        sprite.spriteName="11000782";
    }

MyButton

public class MyButton : MonoBehaviour {

    //第一種點擊事件方法

    //定義一個公開button點擊事件
    public void ButtonClick() {

        Debug.Log("我是Button按鈕被點擊了");
    
    }

    //第二種點擊事件方法

    //代碼綁定點擊事件 OnCLick內(nèi)置點擊事件 寫這個就會點擊
    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
{
    //聲明一個持有引用,用來存貯加載后的預(yù)制體
    private GameObject prefab_Info;
    void Start () {

        //存貯預(yù)制體
        prefab_Info=Resources.Load<GameObject>("Info");//泛型 GameObject 參數(shù)1:預(yù)制體的名稱

        //NGUI自帶API 把預(yù)制體加載到場景中去 有重載
        NGUITools.AddChild(gameObject, prefab_Info);//參數(shù)1:父物體 參數(shù)2:子物體   
    }
    
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容