栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

unity血条

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

unity血条

项目需求,做了一个通用的血条,在这里记录一下

using UnityEngine;
using UnityEngine.UI;
namespace GCD.Ui
{
    //加减血有缓动效果血条。
    //如果没有加uiHpEff,就是普通血条
    [AddComponentMenu("UI/XBlood")]
    public class UiCommonBloodPanel : MonoBehaviour
    {
        [Space(10),Header("普通血条")]
        public Image uiHpBar = null;

        [SerializeField, Header("血条加血image")]
        private Image  uiAddImage = null;
        [SerializeField, Header("血条减血image")]
        private Image  uiCutImage = null;

        [SerializeField, Header("血条缓动效果")]
        private Image uiHpEff = null;

        [SerializeField, Header("血条缓动速度")]
        private float Speed = 0.3f;

        private float _tValue = 0; //当前血条值
        private float _lastValue = 0; //上次血条值

        private bool _isAddHp; 
        private bool _isCutHp;

        /// 
        /// 血条初始化
        /// 
        /// 
        /// 
        public void Init(float curhp, float maxhp) 
        {
            if (uiHpBar != null && maxhp > 0)
            {
                _tValue = curhp / maxhp;
                uiHpBar.fillAmount = _tValue;
            }
            if (uiHpEff != null)
            {
                uiHpEff.fillAmount = _tValue;              
            }
            if (uiAddImage != null && uiCutImage != null )
            {
                CTools.SetActive(uiAddImage, false);
                CTools.SetActive(uiCutImage, false);

            }
            _isAddHp = false;
            _isCutHp = false;
        }

        /// 
        /// 血条更新
        /// 
        /// 
        /// 
        public void OnSelfHpChange(float curhp, float maxhp)
        {
            _tValue = curhp / maxhp;
            if (uiHpEff == null && uiHpBar!= null) 
            {
                uiHpBar.fillAmount = _tValue;  //如果没有挂缓动效果,直接加血
                return;
            }

            if (uiCutImage == null || uiCutImage == null || uiHpEff == null) return;


            if (_tValue > uiHpEff.fillAmount) //加血
            {
                _lastValue = uiHpEff.fillAmount;
                _isAddHp = true; _isCutHp = false;
                uiHpEff.sprite = uiAddImage.sprite;
                uiHpEff.fillAmount = _tValue;
                uiHpBar.fillAmount = _lastValue;
            }

            if (_tValue < uiHpBar.fillAmount)//减血
            {
                _lastValue = uiHpBar.fillAmount;
                _isCutHp = true; _isAddHp = false;
                uiHpEff.sprite = uiCutImage.sprite;
                uiHpBar.fillAmount = _tValue;
                uiHpEff.fillAmount = _lastValue;
            }
        }
        void Update()
        {
            if (uiHpEff != null && uiHpBar != null && uiHpBar.fillAmount != uiHpEff.fillAmount )
            {
                if (uiHpBar.fillAmount < uiHpEff.fillAmount && _isAddHp)
                {
                    uiHpBar.fillAmount += Speed * Time.deltaTime;
                    if (uiHpBar.fillAmount >= uiHpEff.fillAmount)
                    {
                        _isAddHp = false;
                        uiHpBar.fillAmount = uiHpEff.fillAmount;
                    }
                }

                if (uiHpBar.fillAmount < uiHpEff.fillAmount & _isCutHp)
                {
                    uiHpEff.fillAmount -= Speed * Time.deltaTime;
                    if (uiHpEff.fillAmount <= uiHpBar.fillAmount)
                    {
                        _isCutHp = false;
                        uiHpEff.fillAmount = uiHpBar.fillAmount;
                    }
                }
            }

            uiHpBar.color = Color.Lerp(Color.red, Color.green, uiHpBar.fillAmount);
        }

        public void Release() 
        {
            _tValue = 0;
            _isAddHp = false ;
            _isCutHp = false ;
            Speed = 0;
            _lastValue = 0;
        }




    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/900515.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号