标签:委托 C# float 血量 UI maxHp curHp public
利用委托实现玩家扣血,UI刷新功能
玩家血量逻辑
/*玩家的数据,通过向外部暴露一个委托,从而减少代码之间的耦合度*/
using UnityEngine;
// 声明一个血量变动的委托
public delegate void HpChange(float curHp, float maxHp);
public class Player : MonoBehaviour
{
// 将声明的委托进行实例化
public HpChange Hurt;
// 当前血量
float curHp;
// 最大血量
float maxHp;
void Start() {
// 初始化赋值
curHp = maxHp = 100;
// 首次执行,刷新委托,防止显示不正确
Hurt?.Invoke(CurHp,maxHp);
}
public float CurHp {
get => curHp;
set {
// 血量变动
curHp = value;
// 执行委托方法
Hurt?.Invoke(CurHp,maxHp);
}
}
// 测试逻辑
[ContextMenu("扣血")]
public void HurtTest() {
CurHp -= 10;
}
}
UI显示逻辑
/*显示UI脚本,通过向玩家的委托中注册事件,无需获得玩家的对应数据也可以获得相应的显示效果*/
using UnityEngine;
using UnityEngine.UI;
// 玩家血量UI
public class PlayerHpUI : MonoBehaviour
{
// 玩家
Player player;
// 血量Image
Image imageHp;
// 血量Text
Text textHp;
void Awake() {
// 获得要显示的UI
imageHp = GameObject.Find("HpImage").GetComponent<Image>();
textHp = GameObject.Find("HpImage/Hp").GetComponent<Text>();
// 获得对应的游戏物体
player = FindObjectOfType<Player>();
// 向游戏物体中的委托注册血量变动的方法
player.Hurt += hpShow;
}
//血量显示,当游戏物体上的委托调用,这里也会相应的调用
private void hpShow(float curHp, float maxHp) {
imageHp.fillAmount = curHp / maxHp;
textHp.text = curHp + "/" + maxHp;
}
}
开发时减少彼此代码之间的耦合度
标签:委托,C#,float,血量,UI,maxHp,curHp,public 来源: https://www.cnblogs.com/wuzhongke/p/16580798.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。