当前位置:   article > 正文

Unity-UGUI 血条制作-缓动效果(HP Slider)-多层血条_ugui slider缓慢变化

ugui slider缓慢变化

今天尝试用一个新方法做血条缓动效果,  只用了UGUI最基本组件:

新建一个Slider,[隐藏]或者[删去]滑动按钮 Handle Slide Area,变成血条的样子:

重点:

原始的Fill游戏体,作为【瞬间掉血】的那个血条,

加入一个新的Fill游戏体,作为【缓慢掉血】的那个血条。直接ctrl+d复制一个Fill就好,如图

调整这个Fill(1) 的参数, 使其和Fill一样(这也是重点):

别忘了把【缓慢掉血】的血条,调一个不一样的颜色,例如白色:

挂上下面的脚本,给public 字段赋对应的值,然后调用即可。

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. /// <summary>
  6. /// 设计编写:常成功
  7. /// 创建时间:2020/04/14
  8. /// 脚本功能:双层血条, 缓动掉血效果
  9. /// 挂载位置:挂在Slider游戏体上比较好
  10. /// </summary>
  11. // 为了节省性能, 采用调用式, 而不是用update去监控血量变化
  12. public class HP_Sub_Tween : MonoBehaviour
  13. {
  14. // [实际血量]-瞬间掉血, Slider组件里自带的那个Fill
  15. public RectTransform fill_rect_trans;
  16. // [缓动血量]-缓慢掉血, 自己复制出来的Fill_1
  17. public RectTransform tween_rect_trans;
  18. private float tween_speed = 4.0f;
  19. private bool tween_flag = false;
  20. private float last_max_x = 0;
  21. private float start_x = 0; // 缓慢掉血的血条-缓动起点
  22. private float end_x = 0; // 缓慢掉血的血条-缓动终点
  23. private float now_x = 0;
  24. private float tm_t = 0;
  25. // Start is called before the first frame update
  26. void Start()
  27. {
  28. // 确保[实际血量]显示在最上面(对应在Hierarchy同级的最下面)
  29. fill_rect_trans.SetAsLastSibling();
  30. // 初始的时候让[实际血量]和[缓动血量]一致
  31. tween_rect_trans.anchorMax = fill_rect_trans.anchorMax;
  32. last_max_x = fill_rect_trans.anchorMax.x;
  33. }
  34. // Update is called once per frame
  35. void Update()
  36. {
  37. // 启动过渡动画
  38. if (tween_flag)
  39. {
  40. tm_t += tween_speed * Time.deltaTime;
  41. Debug.Log(tm_t);
  42. if (tm_t >= 1)
  43. {
  44. tm_t = 1;
  45. tween_flag = false; // 关闭过渡效果
  46. last_max_x = end_x; // 记录缓动停止到哪里
  47. }
  48. // 采用Lerp, 暴击的时候, 会显得血掉的快
  49. now_x = Mathf.Lerp(start_x, end_x, tm_t);
  50. tween_rect_trans.anchorMax = new Vector2(now_x, fill_rect_trans.anchorMax.y);
  51. }
  52. }
  53. // 启动减血效果(此时Slider的value已经变化过了, [实际血量]已经变化)
  54. public void Start_Tween()
  55. {
  56. start_x = last_max_x;
  57. end_x = fill_rect_trans.anchorMax.x;
  58. tween_flag = true;
  59. tm_t = 0;
  60. }
  61. }

看一下运行效果:

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/125248
推荐阅读
相关标签
  

闽ICP备14008679号