Unity中用到的C#补充(七)- 委托与事件

1.事件的定义

  1. 声明事件委托。
  2. 声明事件。
  3. 添加事件的触发方法。
  4. 添加事件的处理程序(响应事件的方法)。
  5. 将指定的事件处理程序邦定到要处理的事件上(订阅事件)。
  6. 用户信息操作,并触发事件(调用事件的触发方法)。
  7. 通过事件委托的回调,执行我们需要的事件处理程序。

2.简单示例

using System;

namespace ConsoleApplication1
{
    class Program
    {
        public delegate void MyDelegate();//声明事件委托
        public static event MyDelegate MyEvent;//声明事件

        static void Main(string[] args)
        {
            TestEvent myClass = new TestEvent();//这里构造类时先调用了TestEvent中的事件订阅
            MyEvent += TestDelegate1; //订阅事件


            OnTestEvent();
            Console.ReadKey();
        }

        //事件触发方法 static 是为了能在Main中调用
        static void OnTestEvent()
        {
            if (MyEvent != null)
                MyEvent();
        }

        //定义处理事件的方法,他与声明事件的delegate具有相同的参数和返回值类型
        static void TestDelegate1()
        {
            Console.WriteLine("委托事件1");
        }
    }

    public class TestEvent
    {
        public TestEvent()
        {
            Program.MyEvent += TestDelegate2;//订阅事件
        }
        //定义处理事件的方法,他与声明事件的delegate具有相同的参数和返回值类型
        public void TestDelegate2()
        {
            Console.WriteLine("委托事件2");
        }
    }
}

结果:
这里写图片描述

3.Unity 中的应用示例

  • unity 中玩家穿脱装备引起的属性变化
using UnityEngine;
using System.Collections;

//该类负责UI界面中人物血条的更新
public class UIHpClass
{
    //绑定事件
    public void AddEventListener()
    {
        T_005_Event_Test.OnInventoryChangeEvent += UpdateHp;
    }
    public void UpdateHp()
    {
        Debug.Log("更新人物血量显示");
    }
}
//该类负责UI界面中人物属性面板的数值更新
public class UIPlayerProperty
{
    //绑定事件
    public void AddEventListener()
    {
        T_005_Event_Test.OnInventoryChangeEvent += UpdateProperty;
    }
    public void UpdateProperty()
    {
        Debug.Log("更新人物属性面板的数值显示");
    }
}

//该类负责记录人物信息,并将人物信息上传至数据库
public class PlayerInfo
{
    //绑定事件
    public void AddEventListener()
    {
        T_005_Event_Test.OnInventoryChangeEvent += UpdatePlayerInfo;
    }
    //更新数据库中人物信息
    public void UpdatePlayerInfo()
    {
        Debug.Log("人物信息更新,已上传至数据库");
    }
}
public class T_005_Event_Test : MonoBehaviour
{
    public delegate void OnInventoryChangeDalegate();//声明事件委托
    public static event OnInventoryChangeDalegate OnInventoryChangeEvent;//声明事件
    void Awake()
    {
        PlayerInfo palyerInfo = new PlayerInfo();
        palyerInfo.AddEventListener();
        UIHpClass uiHp = new UIHpClass();
        uiHp.AddEventListener();
        UIPlayerProperty playerProperty = new UIPlayerProperty();
        playerProperty.AddEventListener();
    }
    void Start()
    {
        PlayerChangeEquip(true,"龙鳞宝刀");
    }
    //控制玩家穿上/脱下装备
    public void PlayerChangeEquip(bool isEquip,string message)
    {
        if (isEquip)
            Debug.Log("玩家穿上装备: " + message);
        else
            Debug.Log("玩家脱下装备: " + message);

        //只要人物穿上/脱下装备,我们就通过OnInventoryChangeEvent事件去更新人物信息及UI界面的数据显示
        OnInventoryChangeEvent();
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值