Unity中用到的C#补充(七)- 委托与事件
2015-11-16 22:55
429 查看
1.事件的定义
声明事件委托。声明事件。
添加事件的触发方法。
添加事件的处理程序(响应事件的方法)。
将指定的事件处理程序邦定到要处理的事件上(订阅事件)。
用户信息操作,并触发事件(调用事件的触发方法)。
通过事件委托的回调,执行我们需要的事件处理程序。
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(); } }
相关文章推荐
- Unity3D将来时:IL2CPP——C#的变迁
- UnityEditor 用Gizmos画出类似NGUI,UIPanel的矩形框
- Unity中用到的C#补充(六)- Delegate委托
- Unity中C# 文件本地读取,本地保存等实例
- Unity中的Time和Time.timeScale对协程的yield的影响
- Unity Android 加密 so
- Unity3D笔记2
- Unity与Android接口互相调用
- Unity 编辑模式下快速移动其它gameObject到当前gameObject位置处
- Unity Json
- 再详细的介绍一下Unity5的AssetBundle
- Unity5的AssetBundle的一点使用心得
- Unity3D研究院编辑器之创建Lua脚本模板(十六)
- Unity3D Editor 编辑器简易教程
- UnityTestTool实用解释
- Unity5 发送广播与消息的探索
- Vector方法magnitude
- unity 使用xcode5.1 launching iOS project via Xcode5 failed
- Unity3d官方单元测试插件学习
- Spine导入Unity