赞
踩
今天尝试用一个新方法做血条缓动效果, 只用了UGUI最基本组件:
新建一个Slider,[隐藏]或者[删去]滑动按钮 Handle Slide Area,变成血条的样子:
重点:
原始的Fill游戏体,作为【瞬间掉血】的那个血条,
加入一个新的Fill游戏体,作为【缓慢掉血】的那个血条。直接ctrl+d复制一个Fill就好,如图
调整这个Fill(1) 的参数, 使其和Fill一样(这也是重点):
别忘了把【缓慢掉血】的血条,调一个不一样的颜色,例如白色:
挂上下面的脚本,给public 字段赋对应的值,然后调用即可。
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
-
-
- /// <summary>
- /// 设计编写:常成功
- /// 创建时间:2020/04/14
- /// 脚本功能:双层血条, 缓动掉血效果
- /// 挂载位置:挂在Slider游戏体上比较好
- /// </summary>
-
-
-
- // 为了节省性能, 采用调用式, 而不是用update去监控血量变化
- public class HP_Sub_Tween : MonoBehaviour
- {
- // [实际血量]-瞬间掉血, Slider组件里自带的那个Fill
- public RectTransform fill_rect_trans;
- // [缓动血量]-缓慢掉血, 自己复制出来的Fill_1
- public RectTransform tween_rect_trans;
-
- private float tween_speed = 4.0f;
- private bool tween_flag = false;
- private float last_max_x = 0;
- private float start_x = 0; // 缓慢掉血的血条-缓动起点
- private float end_x = 0; // 缓慢掉血的血条-缓动终点
- private float now_x = 0;
- private float tm_t = 0;
-
-
- // Start is called before the first frame update
- void Start()
- {
- // 确保[实际血量]显示在最上面(对应在Hierarchy同级的最下面)
- fill_rect_trans.SetAsLastSibling();
- // 初始的时候让[实际血量]和[缓动血量]一致
- tween_rect_trans.anchorMax = fill_rect_trans.anchorMax;
- last_max_x = fill_rect_trans.anchorMax.x;
- }
-
-
- // Update is called once per frame
- void Update()
- {
- // 启动过渡动画
- if (tween_flag)
- {
- tm_t += tween_speed * Time.deltaTime;
- Debug.Log(tm_t);
- if (tm_t >= 1)
- {
- tm_t = 1;
- tween_flag = false; // 关闭过渡效果
- last_max_x = end_x; // 记录缓动停止到哪里
- }
- // 采用Lerp, 暴击的时候, 会显得血掉的快
- now_x = Mathf.Lerp(start_x, end_x, tm_t);
- tween_rect_trans.anchorMax = new Vector2(now_x, fill_rect_trans.anchorMax.y);
- }
- }
-
-
- // 启动减血效果(此时Slider的value已经变化过了, [实际血量]已经变化)
- public void Start_Tween()
- {
- start_x = last_max_x;
- end_x = fill_rect_trans.anchorMax.x;
- tween_flag = true;
- tm_t = 0;
- }
-
- }
看一下运行效果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。