Unity3D插件之NGUI 應(yīng)用案例(菜單開發(fā)逗旁、技能CD特效、注冊功能座咆、聊天系統(tǒng)痢艺、背包系統(tǒng)、開發(fā)血條)

框架視圖

菜單開發(fā)
菜單開發(fā)
技能CD特效
技能CD特效
注冊功能
注冊功能
聊天系統(tǒng)
聊天系統(tǒng)
背包系統(tǒng)
背包系統(tǒng)
開發(fā)血條
開發(fā)血條

關(guān)鍵代碼

AgeLimit

using UnityEngine;
using System.Collections;

public class AgeLimit : MonoBehaviour {
    private UIInput uiInput;
    void Start () {
        uiInput = this.GetComponent<UIInput>();
    }
    
    public void OnAgeChange () {
         
        int intValue = int.Parse(uiInput.value);
        if (intValue<18)
        {
            uiInput.value = "18";
        }

        if (intValue>120)
        {
            uiInput.value = "120";
        }
        
    }
}

GameSetting

using UnityEngine;
using System.Collections;


//設(shè)計游戲相關(guān)參數(shù)

//定義游戲難度枚舉類型
public enum GameGrade
{
    Easy,
    NORMAL,
    DIFFICULT

}

//定義游戲控制類型
public enum ControlType
{
    KEYBOARD,
    TOUCH,
    MOUSE
}
public class GameSetting : MonoBehaviour {

    //定義
    public float volume = 1;
    public GameGrade grade = GameGrade.NORMAL;
    public ControlType controlType = ControlType.KEYBOARD;
    //是否滿屏
    public bool isFullscreen = true;


    //聲明持有動畫位移的引用
    public TweenPosition startPanelTween;
    public TweenPosition optionPanelTween;


    //創(chuàng)建公開的方法來監(jiān)聽值的改變
    //監(jiān)聽聲音的改變
    public void OnVolumeChanged() {
        //測試
        // print("OnVolumeChanged");
        //獲取改變的值
        volume = UIProgressBar.current.value;//按 f12跟蹤
    }
    //監(jiān)聽游戲等級的改變
    public void OnGameGradeChanged() {
        print("OnGameGradeChange" + UIPopupList.current.value);
        switch(UIPopupList.current.value.Trim())
        {//去掉空格
        
            case  "容易":
                grade = GameGrade.Easy;
                break;
            case "一般":
                grade = GameGrade.NORMAL;
                break;
            case "困難":
                grade = GameGrade.DIFFICULT;
                break;

        }

    }

    //監(jiān)聽操作類型的改變
    public void OnControlTypeChanged()
    {
        print("OnControlTypeChanged" + UIPopupList.current.value);
        switch (UIPopupList.current.value.Trim())//去掉空格
        {
            case "鍵盤":
                controlType = ControlType.KEYBOARD;
                break;
            case "觸摸":
                controlType = ControlType.TOUCH;
                break;
            case "鼠標(biāo)":
                controlType = ControlType.MOUSE;
                break;

        }
    }
    //監(jiān)聽是否滿屏
    public void OnIsFullScreenChanged(){
        print("OnIsFullScreenChanged"+UIToggle.current.value);
        isFullscreen = UIToggle.current.value;
    }


    //監(jiān)聽選項按鈕被點擊方法
    public void OnOptionButtonClick() {
        //動畫向前播放介陶;
        startPanelTween.PlayForward();
        optionPanelTween.PlayForward();
    }

    //監(jiān)聽完成按鈕被按下
    public void OnCompleteSettingButtonClick() {
        //動畫反轉(zhuǎn)播放堤舒;
        optionPanelTween.PlayReverse();
        startPanelTween.PlayReverse();
    }
}

Knapsack

using UnityEngine;
using System.Collections;

public class Knapsack : MonoBehaviour {
   //持有16個格子的引用
    public GameObject[] ceil;

    //持有3個裝備名字的引用
    public string[] equipmentsName;

    //持有物品的引用
    public GameObject item;

   

    //模擬按下空格鍵即生成物品
     void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            PickUp();
        }
    }



    //模擬撿起的方法;
    public void PickUp() {
        //隨機(jī)撿起一件裝備
        //聲明一個下標(biāo)
        int index = Random.Range(0,equipmentsName.Length);
        //獲取撿起裝備的名字
        string name = equipmentsName[index];

        //是否找到
        bool isFind = false;
        //遍歷格子已經(jīng)有物品
        for (int i = 0; i < ceil.Length; i++)
        {
            //判斷當(dāng)前已經(jīng)有物品
            if (ceil[i].transform.childCount > 0)
            {
                //獲取子類下面組件哺呜;
                KnapsackItem item = ceil[i].GetComponentInChildren<KnapsackItem>();
                //判斷當(dāng)前游戲物體名字跟我們撿起來的物品是否一樣舌缤;
                if (item.sprite.spriteName==name)
                {
                    //標(biāo)志位設(shè)置為true;
                    isFind = true;
                    //調(diào)用數(shù)量增加方法
                    item.AddCount();
                    //數(shù)量增加完畢即中斷
                    break;
                }


            }
        }

        if (isFind==false)
        {


            //遍歷 如果格子沒物品即添加 添加完成后中斷某残;
            for (int i = 0; i < ceil.Length; i++)
            {
                //判斷是否有物品
                if (ceil[i].transform.childCount == 0)
                {
                    //添加物品
                    GameObject go = NGUITools.AddChild(ceil[i], item);
                    //獲取隨機(jī)生成圖片名字
                    go.GetComponent<UISprite>().spriteName = name;
                    //設(shè)置好位置国撵;
                    go.transform.localPosition = Vector3.zero;


                    //添加完畢中斷
                    break;
                }
            }

            //滿格即中斷
           

            
        }

    }
}

KnapsackItem

using UnityEngine;
using System.Collections;

public class KnapsackItem : UIDragDropItem {

    //聲明公開的類型引用
    public UISprite sprite;

    public UILabel label;

    //聲明計數(shù);
    private int count = 1;

    //物品數(shù)量增加
    public void AddCount() {
        count++;
        label.text = count + "";
    }

    protected override void OnDragDropRelease(GameObject surface)
    {
        base.OnDragDropRelease(surface);
        //判斷格子下面是否有子物體玻墅;
        //Debug.Log(surface.transform.childCount);


        //Debug.Log("111");
        //把移動的物體的父類設(shè)置成被碰撞到的格子
        //this.transform.parent = surface.transform;
        //與碰撞的物體位置保持一致
        // this.transform.position = surface.transform.position;
        //this.transform.localPosition = Vector3.zero;


        //1.判斷格子下面是否有物體 沒有就按放
        //2.判斷便簽
        if (surface.tag=="Ceil")
        {  
            //安置物品
            this.transform.parent = surface.transform;
            this.transform.localPosition = Vector3.zero;

        }
        else if (surface.tag=="KnapsackItem")
        {
            //交換位置
            //1.保存起當(dāng)前有物品的父類介牙;
            Transform parent = surface.transform.parent;
            //把本物品的安置到另一個格子里面去
            surface.transform.parent = this.transform.parent;
            surface.transform.localPosition = Vector3.zero;

            //把拖拽的物品按放發(fā)到本格子去
            this.transform.parent = parent;
            this.transform.localPosition = Vector3.zero;
        }


    }
}

MyChatInput

using UnityEngine;
using System.Collections;

public class MyChatInput : MonoBehaviour {
    
    //聲明持有引用
    private UIInput input;


    //聲明公開持有引用

    public UITextList textList;


    //模擬生成名字
    //定義一個數(shù)組
   private string[] names = new string[] {"TonyWan","QQ","facebook","tube" };

    void Start () {

        input = this.GetComponent<UIInput>();
    }
    


    public void OnChatSubmit() {
        //獲取相應(yīng)的輸入值;
        string chatMessage = input.value;
        //隨機(jī)生成后名字
        string name =names[Random.Range(0,4)];
        //吧獲得值添加到文本區(qū)
        textList.Add(name+"說:"+chatMessage);
        //提交完之后把輸入值清空
        input.value = "";

    }
}

MyDropDragItem

using UnityEngine;
using System.Collections;

public class MyDropDragItem :UIDragDropItem {

    //修飾符 受保護(hù)的 重寫父類的移動 拖拽 松開的方法
    protected override void OnDragDropRelease(GameObject surface)
    {
        base.OnDragDropRelease(surface);//父類方法

        //然后可以進(jìn)行代碼處理
        Debug.Log(surface);
    }
}

Skill

using UnityEngine;
using System.Collections;

public class Skill : MonoBehaviour {
    //定義冷卻時間
    private float coldTime = 2;
    //標(biāo)志位 是否可以釋放技能
   // private bool isCanRelease = true;


    //定義一個持有的應(yīng)用 為了得到fillAmount;
    private UISprite sprite;

    //標(biāo)志位 是否正在冷卻
    private bool isColding=false;
    void Start () {
        //通過查找的方法獲取相應(yīng)組件澳厢;
        sprite = transform.Find("Sprite").GetComponent<UISprite>();

    }
    
    
    void Update () {
        //按鍵A表示釋放技能
        if (Input.GetKeyDown(KeyCode.A)&&isColding==false)
        {
            //1.釋放技能 創(chuàng)建粒子系統(tǒng) 顯示技能特效
            //2.UI顯示技能冷卻效果
            sprite.fillAmount = 1;
            isColding = true;
        }
        if (isColding)
        {
            //當(dāng)開始可以冷卻時候 計算fillAmount遞減值环础;
            sprite.fillAmount -= (1f / coldTime) * Time.deltaTime;
            //當(dāng)值顯示小于0.05的時候 表示不可以冷卻
            if (sprite.fillAmount<=0.05f)
            {
                isColding= false;
                //顯示黑色遮罩不可以用
                sprite.fillAmount = 0;
            }
        }
    }
}

TestHudText

using UnityEngine;
using System.Collections;

public class TestHudText : MonoBehaviour {


    //聲明一個持有引用
    //private HUDText text;
    public HUDText text;

    //void Start () {
 //       //獲取組件
 //       text = this.GetComponent<HUDText>();
    //}
    
    
    void Update () {
        //受傷害
        if (Input.GetMouseButtonDown(0))
        {
            
            text.Add(-10,Color.red,1f);//參數(shù)1:傷害值 累加 參數(shù)2:顏色 參數(shù)3:停留時間
        }

        //治療值
        if (Input.GetMouseButtonDown(1))
        {
            text.Add(10,Color.green,1f);
        }
    }
}

TestTextList

using UnityEngine;
using System.Collections;

public class TestTextList : MonoBehaviour {
    
    //聲明一個text持有的引用
    private UITextList textList;

    //聲明一個行號
    private int lineNumber=0;
    void Start () {

        textList = this.GetComponent<UITextList>();
    }
    
    
    void Update () {

        //模擬鼠標(biāo)按鍵添加字段
        if (Input.GetMouseButtonDown(0))
          {
            textList.Add("TonyWan"+lineNumber++);
          }
    

    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末囚似,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子线得,更是在濱河造成了極大的恐慌饶唤,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贯钩,死亡現(xiàn)場離奇詭異募狂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)角雷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門祸穷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谓罗,你說我怎么就攤上這事粱哼〖径” “怎么了檩咱?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長胯舷。 經(jīng)常有香客問我刻蚯,道長,這世上最難降的妖魔是什么桑嘶? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任炊汹,我火速辦了婚禮,結(jié)果婚禮上逃顶,老公的妹妹穿的比我還像新娘讨便。我一直安慰自己,他們只是感情好以政,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布霸褒。 她就那樣靜靜地躺著,像睡著了一般盈蛮。 火紅的嫁衣襯著肌膚如雪废菱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天抖誉,我揣著相機(jī)與錄音殊轴,去河邊找鬼。 笑死袒炉,一個胖子當(dāng)著我的面吹牛旁理,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播我磁,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼孽文,長吁一口氣:“原來是場噩夢啊……” “哼淹接!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叛溢,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤塑悼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后楷掉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厢蒜,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年烹植,在試婚紗的時候發(fā)現(xiàn)自己被綠了斑鸦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡草雕,死狀恐怖巷屿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情墩虹,我是刑警寧澤嘱巾,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站诫钓,受9級特大地震影響旬昭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜菌湃,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一问拘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惧所,春花似錦骤坐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驰唬,卻和暖如春顶岸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叫编。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工辖佣, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搓逾。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓卷谈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親霞篡。 傳聞我的和親對象是個殘疾皇子世蔗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容