C#-委托
2022/8/13 14:25:37
本文主要是介绍C#-委托,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
利用委托实现玩家扣血,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#-委托的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#