moba类游戏开发日志(八)血条显示-减血伤害/治疗回血

上一篇文章的代码中出现了一些未提及过的类,就比如Health,这个Health呢就是抽象出来的一个血条类,它可以被主角/怪物/箭塔等一些列对象继承,显然他的成员函数也非常朴素,除了初始化之外也就是扣血函数和回血函数,如果绝一点甚至可以只设一个扣血函数,毕竟回血就是减一个负数嘛,不过我觉得这里还是分开写比较好,至少在代码可读性上会好点

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Health : MonoBehaviour
{
    // [SerializeField]
    public SpriteSlider hp;
    private uint value = 1;
    // Start is called before the first frame update
    void Start()
    {
        hp = GetComponentInChildren<SpriteSlider>();
        Init();
        // print("3434343434");
        // print(hp.Value);
    }

    public void Init()
    {
        hp.Value = value;
    }

    public void TakeDamage(float damage)
    {
        hp.Value -= damage;
    }
    public void heal(float x)
    {
        hp.Value += x;
    }
}

很简单的一个Health类,但是用处却很大,在发生攻击/治疗事件的地方,我们都需要用到它,无他,显然是为了获取效果作用对象身上的Health的信息继而视需求去改变Health的value(也就是血量),至于如何在UI视图上讲扣血显示出来,这个也没什么难的,稍微在代码中调整下血条的Slider即可,因为这东西庸的地方同样也比较广(除了血条还有能量条之类的),所以我同样抽象出了一个滑动条类,如下所示

using System.IO;
using System.Dynamic;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpriteSlider : MonoBehaviour
{
    [SerializeField]
    private Transform front;

    public float m_value;

    public float Value
    {
        get
        {
            return  m_value;
        }

        set
        {
            m_value = value;
            front.localScale = new Vector3(m_value,1,1);
            front.localPosition = new Vector3((1-m_value)*-0.8f,0); 
        }
    }
}

在有了上面两个强大的工具之后,我们只需要适需求调整对象的血量即可