下面来说下怎么使用ngui彩色血条制作,使用NGUI可以制做出彩色角色血条,加载进度条,制作血条时,可以根据血的多少显示不同的颜色,可以对UISider与UILabel进行简单的封装。



UISprite:NGUI精灵图片组件


Atlas:图片集

Sprite:选择的图片集中的图片

Sprite Type:Simple(对图片不进行处理,进行缩放到用户指定大小),Sliced(切成小片的图片来适应大小)

Tiled(以砖块的形式填充区域,进图片不进行缩放),Filled(填充区域),Advacced(高级的,可自定义边缘的像素)

如果是小块的图片,需要进精灵的类型进行修改,这样才能达到效果


ngui彩色血条制作彩色滑动条:

a.在Widget Tool里添加一个Progress Bar,默认的为我们添加了一个UISider(NGUI compent)


Value:百分比

Alpha:透明度

Steps:步阀阈值

Appearance:特性

a.Foreground(前景图片)

b.Background(背景图片)

c.Thumb(移动指标)

d.Direction(滑动方向)

On Value Change:当滑动时,进行事件分发

b.在Progress Bar上添加一个Script,用来改变进度不同的颜色


  1. public class UISliderColors : MonoBehaviour
  2. {
  3. public UISprite sprite;

  4. public Color[] colors = new Color[] { Color.red, Color.yellow, Color.green };

  5. UIProgressBar mBar;

  6. void Start () { mBar = GetComponent<UIProgressBar>(); Update(); }

  7. void Update ()
  8. {
  9. if (sprite == null || colors.Length == 0) return;

  10. float val = mBar.value;
  11. val *= (colors.Length - 1);
  12. int startIndex = Mathf.FloorToInt(val);

  13. Color c = colors[0];

  14. if (startIndex >= 0)
  15. {
  16. if (startIndex + 1 < colors.Length)
  17. {
  18. float factor = (val - startIndex);
  19. c = Color.Lerp(colors[startIndex], colors[startIndex + 1], factor);
  20. }
  21. else if (startIndex < colors.Length)
  22. {
  23. c = colors[startIndex];
  24. }
  25. else c = colors[colors.Length - 1];
  26. }

  27. c.a = sprite.color.a;
  28. sprite.color = c;
  29. }
  30. }


当Sprite指定为当前Progress Bar的前景图片
e.在当前的Prgoress Bar在创建一个UILabel,将事件分发指定到UILabel

测试代码:


  1. public class Tt : MonoBehaviour {

  2. private UISlider slider;
  3. // Use this for initialization
  4. void Start () {
  5. slider = GetComponent<UISlider>();
  6. slider.value = 0;
  7. }

  8. // Update is called once per frame
  9. void Update () {
  10. if(slider!=null) {
  11. Debug.Log(slider.value);
  12. slider.value += 0.0005f;
  13. }
  14. }
  15. }