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); } } }
在有了上面两个强大的工具之后,我们只需要适需求调整对象的血量即可
发表评论