如果血条显示不出来就是你选择的血条颜色透明度没有设置
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
#if UNITY_EDITOR
using UnityEditor;
#endif
//作者:小也在编程
//时间:2023年7月15日
//QQ:277381119
namespace TopGame.UI
{
public class CustomHP : Image
{
struct DamageData
{
public float damage;
/// <summary>
/// 当前血条百分比(0到1),例如从50%掉到20%,那么这就是0.5f
/// </summary>
public float startValue;
/// <summary>
/// 受伤前,当前血量
/// </summary>
public float curHP;
public float time;
/// <summary>
/// 剩余百分比(0到1),例如剩余20%血量,就是0.2f
/// </summary>
public float endValue;
/// <summary>
/// 绘制的顶点偏移
/// </summary>
public float vertexOffsetY;
public Color color;
/// <summary>
/// 绘制矩形的长度
/// </summary>
public float rectLength
{
get
{
return Mathf.Clamp(endValue - startValue, 0, 1);
}
}
/// <summary>
/// 插值的进度 0到1
/// </summary>
public float lerpPer;
public bool IsShow
{
get
{
return (Time.time - time) < 0.5f;
}
}
}
[Range(0f, 1f)]
public float slider = 1f;
public bool bReverse = false;
public float m_offsetX;//x轴偏移
public float m_offsetY;//y轴偏移
public List<Color> m_ColorList;
public float Max;
public float Cur;
public float CurLerpValue;
public float SingleValue;
public int ColorIndex;
/// <summary>
/// 总的血条数量
/// </summary>
public int MaxHPCount;
/// <summary>
/// 当前血条数量
/// </summary>
public int CurHPCount;
public bool bInit = false;
public float FlashingTime = 0.5f;
/// <summary>
/// 每次攻击伤害数据
/// </summary>
DamageData damageData = new DamageData();
List<DamageData> m_vRecords = new List<DamageData>();
private bool m_bVertexChange;
protected override void Start()
{
base.Start();
}
//------------------------------------------------------
void Update()
{
VertexLerp();
ColorLerp();
if (m_bVertexChange)
{
m_bVertexChange = false;
SetVerticesDirty();
}
if (!bInit || CurLerpValue <= Cur)
{
return;
}
CurLerpValue = Mathf.Lerp(CurLerpValue, Cur, 0.5f);
RefreshSlider(CurLerpValue);
}
//------------------------------------------------------
public void Test()
{
float value = Random.Range(0, 100);
Debug.Log("Random value:" + value);
//SetLerpValue(Cur- value);
SetValue(Cur - value);
}