Unity中用到的C#补充(七)- 委托与事件
来源:互联网 发布:有了阿里云ems如何建站 编辑:程序博客网 时间:2024/06/06 00:01
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(); }}
0 0
- Unity中用到的C#补充(七)- 委托与事件
- Unity中用到的C#补充(六)- Delegate委托
- Unity中用到的C#补充(一)-C#基础
- Unity中用到的C#补充(二)-面向对象
- Unity中用到的C#补充(三)-字符串
- Unity中用到的C#补充(五)- 简单的本地存储
- Unity中用到的C#补充(四)- Array,ArrayList,List,Drictionary,Hashtable
- Unity 之C# 委托与事件机制
- Unity&C#的委托事件总结
- c#的委托与事件
- C#的委托与事件
- C#的委托与事件
- C# 的委托与事件
- C# 事件,委托与事件的区别
- C#中的委托与事件在Unity中的应用
- unity 事件(委托)
- unity 事件(委托)
- C#与C++的区别(三) 委托与事件
- 南昌大学软件学院大神养成计划脚印-11.16
- Java用ArrayList实现栈
- delegate为什么用assign声明
- 网络编程最佳实践
- 61. 文件系统
- Unity中用到的C#补充(七)- 委托与事件
- 泛型中? super T和? extends T的区别
- java Socket 传输对象的时候程序没反应了。
- 下一步博客计划
- KBuild MakeFile 添加外部头文件
- 不同类型的指针加减(就是向前或向后移动)
- iOS - 消息推送
- AngularJs学习笔记[01]——数据绑定
- 前端【学习心得】HTML基础 | 第一周【前端工程师养成计划】DW开发工具