首页 > 代码库 > c#事件Unity与.Net对比
c#事件Unity与.Net对比
今天在看Unity3d的书,发现上面的调用事件比较特殊,比如说按钮事件
该方法写在OnGUI方法中
if(GUILayout.Button("按钮1")){ //执行事件的处理}
这样看上去,貌似UnityEngine帮我们把事件改成在OnGUI事件中的让我们自己去监听我们自己创建的控件,想想又想不通,
为什么这样做,于是我便在Console中写了一个闹钟类,模拟了下闹钟的响铃事件,代码如下:
using Microsoft.VisualStudio.DebuggerVisualizers;using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace UnitTest{ /// <summary> /// 事件参数类 /// </summary> public class RingingEventArgs : EventArgs { public RingingEventArgs(DateTime dateTime) { Time = dateTime; } public readonly DateTime Time; } /// <summary> /// 闹钟类 /// </summary> public class Alarm { //设定的事件列表 private List<DateTime> List=new List<DateTime>(); //增加闹钟的构造函数 public void Add(DateTime dateTime) { this.List.Add(dateTime); } //委托 public delegate void AlarmHandler(object sender, RingingEventArgs e); //事件 public event AlarmHandler Ringing; /// <summary> /// 调用事件的方法 /// </summary> /// <param name="eventArgs"></param> protected virtual void OnRinging(RingingEventArgs eventArgs) { if (Ringing!=null) { Ringing(this, eventArgs); } } /// <summary> /// 闹钟监测方法 /// </summary> public void CheckAlarm() { while (true) { foreach (DateTime dateTime in List) { if (dateTime.ToString("yyyy-MM-dd hh:mm") == DateTime.Now.ToString("yyyy-MM-dd hh:mm")) { OnRinging(new RingingEventArgs(DateTime.Now)); } } } } }}
//调用检测闹钟方法,触发事件
static void Main(string[] args) { Alarm alarm=new Alarm(); alarm.Add(DateTime.Parse("2014-8-8 16:28")); alarm.Ringing+=alarm_Ringing; alarm.CheckAlarm(); } private static void alarm_Ringing(object sender, RingingEventArgs e) { Console.WriteLine("启用闹钟"+e.Time.ToShortTimeString()); Console.ReadLine(); }
从c#角度事件应该是委托来着,到了UnityEngine中这种方式挺不习惯
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。