UGUI研究之Sprite
学习untiy已经有一段不短的时间,一直没有有效的记录下来,实在遗憾,今天开始记录。 2017 - 01 - 13
最近在写蛮牛的一个每月训练营,超级玛丽,包括UI的切换,获取金币的记录等效果,其中用到记录场景中金币获取数量的地方,用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,然后获取
参考博客:
转自蛮牛一个博主的实现方法: