学习游戏制作记录(UI血条)8.9

1.创建UI滑块

画布设置

填满滑块

将背景和填充都设置为同时设置位置

2.实现实体翻转时血条不翻转

Entity脚本:

 public System.Action onFlipped;//事件订阅系统,即给onFlipped订阅一个功能

        if(onFlipped!=null)//Flip()函数中
        {
        onFlipped();

        }

HealthBar_UI脚本:

    private Entity entity;//获取实体脚本
    private RectTransform myTransform;//获取血条的transform组件

    private void Start()
    {
        entity = GetComponentInParent<Entity>();
        myTransform = GetComponent<RectTransform>();

        entity.onFlipped += FlipUI;//订阅事件
    }

   private void FlipUI()
    {
        myTransform.Rotate(0,180,0);//旋转
    }

3.实现血条随血量更新

CharactorState脚本:

 public System.Action onHealthChange;//订阅血条变化事件,目的是只有在受伤时调用血条变化

currentHealth = GetMaxHealth();//Start()中

        if(ingitedDamageTimer<0&&isInigted)//Update中
        {
            Debug.Log("take the ingitedamage" + ingitedDamage);

            DecreaseHealth(ingitedDamage);//削减血条的函数

            if(currentHealth < 0)
            {
                Die();
            }

            ingitedDamageTimer = ingitedDamageCooldown;
        }

 DecreaseHealth(_damage);//TakeDamage()中

    protected virtual void  DecreaseHealth(int _damage)//调用上面的事件
    {
        currentHealth -= _damage;

        if(onHealthChange != null)
        {
            onHealthChange();
        }
    }

    public  int GetMaxHealth()//获取最大生命值
    {
        return maxHealth.GetValue()+valitity.GetValue()*5;//等于基础生命值加上活力属性*5
    }

HealthBar_UI脚本:

    private Entity entity;
    private RectTransform myTransform;
    private CharactorState mystate;//获取实体的状态脚本
    private Slider slider;//获取滑块

    private void Start()
    {
        entity = GetComponentInParent<Entity>();
        myTransform = GetComponent<RectTransform>();
        slider = GetComponentInChildren<Slider>();
        mystate =GetComponentInParent<CharactorState>();

        entity.onFlipped += FlipUI;
        mystate.onHealthChange += UpdateHealthUI;//订阅事件

        UpdateHealthUI();

    }

    private void UpdateHealthUI()//更新函数
    {
        slider.maxValue = mystate.GetMaxHealth();
        slider.value = mystate.currentHealth;
    }


   private void FlipUI()=> myTransform.Rotate(0, 180, 0);

    private void OnDisable()//结束时取消所有订阅
    {
        entity.onFlipped -= FlipUI;

        mystate.onHealthChange -= UpdateHealthUI;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值