动态血条UI相关 U3D

  1. 制作动态血条首先要先制作一个血条的预制体,其中应包括掉血UI、暴击、闪避等,为了美观还可给他们加上动画组件,根据自己的项目而定。
  2. 制作好预制体后,就是在加载人物或敌人时通过代码给他们动态加载上。(本案例包括动画组件的播放)
  3. 给预制体单独增加一个脚本,方便以后的管理
    下面是代码,也不难理解,产生掉血、暴击、闪避等效果时,直接调用这里面的函数即可
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class EntityHP : MonoBehaviour
{
    #region UI Define
    public Image imgHPGray;
    public Image imgHPRed;

    public Animation criticalAni;
    public Text txtCritical;

    public Animation dodgeAni;
    public Text txtDodge;

    public Animation hpAni;
    public Text txtHp;
    #endregion

    int targetHP = 0;
    int currHP = 0;
    private RectTransform rect;
    private Transform rootTrans;
    private int hpVal;
    private float scaleRate = 1.0F * Constants.ScreenStandardHeight / Screen.height;
    private void Update()
    {
		//血条跟着 rootTrans(主物体)移动
        Vector3 screenPos = Camera.main.WorldToScreenPoint(rootTrans.position);
        rect.position = screenPos * scaleRate;
		//黄色血条渐变
        imgHPGray.fillAmount = currPrg;
        UpdateCurrHP();
    }
	//这个是让血条有个渐变的效果,(打王者农药时,经常会看到一个黄色血条会跟着红色血条慢慢渐变)
    private void UpdateCurrHP()
    {
   		 if (Mathf.Abs(currPrg - targetPrg) < 1)
        {//when abs(~)<1, directly from currHP to targetHP
            currPrg = targetPrg;
        }
       else if (currPrg > targetPrg)
        {//when HP down, currHP decrease to targetHP
            currPrg -= Constants.AccelerHPSpeed * Time.deltaTime;
        }
        else
        {//otherwise increase
            currPrg += Constants.AccelerHPSpeed * Time.deltaTime;
        }
    }
	//初始化血条
    public void Init(Transform trans, int hp)
    {
        rect = transform.GetComponent<RectTransform>();
        rootTrans = trans;
        currHP=targetHP = hpVal = hp;
        imgHPGray.fillAmount = 1;
        imgHPRed.fillAmount = 1;

    }
    //闪避
    public void SetDodge()
    {
        dodgeAni.Stop();
        txtDodge.text = "闪避";
        dodgeAni.Play();
    }
    //暴击
    public void SetCritical(int critical)
    {
        criticalAni.Stop();
        txtCritical.text = critical.ToString();
        //更新HP
        currHP = targetHP;
        targetHP -= critical;
        SetHPVal(currHP, targetHP);
        criticalAni.Play();
    }
	//普通伤害
    public void SetHurt(int hurt)
    {
        hpAni.Stop();
        txtHp.text = hurt.ToString();
        currHP = targetHP;
        targetHP -= hurt;
        SetHPVal(currHP,targetHP);
        hpAni.Play();
    }
	//更新血条变化
    private float currPrg;
    private float targetPrg;
    private void SetHPVal(int oldVal, int nowVal)
    {
        currPrg = 1.0f * oldVal / hpVal;
        targetPrg = 1.0f * nowVal / hpVal;
        imgHPRed.fillAmount = targetPrg;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值