UGUI研究之Sprite

duanzhen_123發表於2017-01-13

UGUI研究之Sprite

學習untiy已經有一段不短的時間,一直沒有有效的記錄下來,實在遺憾,今天開始記錄。 2017 - 01 - 13
最近在寫蠻牛的一個每月訓練營,超級瑪麗,包括UI的切換,獲取金幣的記錄等效果,其中用到記錄場景中金幣獲取數量的地方,用sprite來實現。

-如圖所示,場景中超級瑪麗可以獲取金幣,要在右下角顯示出獲取金幣的數量,就需要用到sprite,以前沒使用過UGUI的圖集,現在來嘗試一下

-* 如圖所示,是UGUI中Image的屬性皮膚,其中,Source Image為Image要顯示的圖片,可以為Sprite,將要顯示的Sprite拖拽到該欄目中*

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class CoinNumContorller : MonoBehaviour {

    public Sprite[] NumberImage;

    public void SetCoinValue(int value)
    {
        value = Mathf.Clamp(value, 0, NumberImage.Length);           //value的範圍在0-9
        this.GetComponent<Image>().sprite = NumberImage[value];        //獲取到圖片數字元件


    }


}

直接上程式碼,這段程式碼是配置圖集的,將此程式碼的.cs檔案拖拽到image上
根據你的需要配置好圖集

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.Sprites;
using UnityEditor;
using UnityEditor.Sprites;
using System;


public class Gaming : MonoBehaviour {

    // Use this for initialization



    public CoinNumContorller CoinFirst;
    public CoinNumContorller CoinSecond;
    public CoinNumContorller CoinThird;


    public static int CoinValue;


    public void UpdateCoinValue(int value)
    {
        value = Mathf.Clamp(value , 0 , 999);
        CoinValue = value;

        var stringValue = value.ToString();    //把value轉換成字串型別

        if (stringValue.Length <= 1)
        {
            CoinFirst.GetComponent<Image>().enabled = true;
            CoinFirst.SetCoinValue((int)Char.GetNumericValue(stringValue[0]));   //獲取字串的第一位
            CoinSecond.GetComponent<Image>().enabled = false;
            CoinThird.GetComponent<Image>().enabled = false;

        }
        else if (stringValue.Length == 2)
        {
            CoinFirst.GetComponent<Image>().enabled = true;
            CoinSecond.GetComponent<Image>().enabled = true;
            CoinThird.GetComponent<Image>().enabled = false;

            CoinFirst.SetCoinValue((int)Char.GetNumericValue(stringValue[0]));
            CoinSecond.SetCoinValue((int)Char.GetNumericValue(stringValue[1]));
        }
        else
        {
            CoinFirst.GetComponent<Image>().enabled = true;
            CoinSecond.GetComponent<Image>().enabled = true;
            CoinThird.GetComponent<Image>().enabled = true;

            CoinFirst.SetCoinValue((int)Char.GetNumericValue(stringValue[0]));
            CoinSecond.SetCoinValue((int)Char.GetNumericValue(stringValue[1]));
            CoinThird.SetCoinValue((int)Char.GetNumericValue(stringValue[2]));
        }



    }


    void Start () {

    }

    // Update is called once per frame
    void Update () {

        UpdateCoinValue(CoinController.CoinNum);  //更新獲取到的金幣數量

    }
}

總結一下,其實方法很簡單,就是建立一個Sprite的陣列,用來存每一個圖集的數字,然後根據需求顯示出來
發現一個方法很簡單的處理顯示數字第幾位的方法,如上圖所示
CoinFirst.SetCoinValue((int)Char.GetNumericValue(stringValue[0]));
//獲取字串的第幾位,先把Int轉換成String,然後獲取

參考部落格:
轉自蠻牛一個博主的實現方法:

相關文章