首先写一种比较容易想到的方式 :
比如BOSS有5W血 一管血是1W
大于4万
大于3万小于4万
大于2万小于3万
大于1万小于2万
小于1万
你分5段来做就好了 5条血叠一起
实例如下:
public void SetBossBlood(IUnitController unit,float damage)
{if (unit.CurrentHp != 0)
{
float MaxHp = 50000;
float cellHp = (MaxHp * 0.2f);
float cur = unit.CurrentHp - damage;
if (cur>4*cellHp&&cur <= 5*cellHp)
{
//1第一段血条(CurrentHp %cellHp )/ cellHp;
}
else if(cur >3*cellHp && cur <=4*cellHp)
{
//2第二段血条
}
else if(cur >2*cellHp && cur <=3*cellHp)
{
//3 大于2万小于3万
}
else if(cur >cellHp && cur <=2*cellHp)
{
//4 大于3万小于4万
}
else if(cur <=cellHp && cur >=0f)
{
//5 大于4万
}
}
}
另一种思路其实也差不多,代码简洁写
cell = (总血量/5)//每一管血量值
n=当前血量/cell 个
第n+1个按安 (当前血量%cell )/cell
实例如下
/// <summary>
/// Boss分段血条显示
/// </summary>
/// <param name="unit">被攻击的boss</param>
/// <param name="damage">伤害</param>
/// <param name="bossIndx">被攻击的是第几个boss</param>
{
int n = 0;
List<Image> blood = new List<Image>();
if (bossIndx == 0)
{
blood = blood01List;
}
else
{
blood = blood02List;
}
float cellHp = (unit.MaxHp * 0.2f);
float cur = unit.CurrentHp - damage;
n = (int)(cur / cellHp);//血条从最上面一层开始(4-n)
Debug.Log("n =" + n);
blood[(4 - n)].fillAmount = (float)(cur % cellHp) / cellHp;
for (int i=0;i<5;i++)
{
if(i< (4-n)) //fillAmount =0的全部关掉
{
blood[i].gameObject.SetActive(false);
}
}
}