目录
C#中的一些概念:
委托(Delegate)
事件(Event)
观察者模式
在项目中建立事件中心的必要
C#中的一些概念:
委托(Delegate)
委托(Delegate)是一个数据类型(类),可以看作是一个方法的集合和管理器,用于对这些方法做一个流程化的管理。C#中的Delegate是强类型的,在声明委托时就已经指定了委托变量只能指向具有特定参数,以及返回值的方法。委托的声明如下:
Delegate void MyDelegate();
委托的类型、参数需要与被委托管理的方法类型一致。
委托可以无参也可以带参。如果带参,则在执行事件流程过程中,所有方法共用一个参数。定义了委托后,需要将被委托的方法集加入到委托中,方法就是委托的参数,如下:
MyDelegate myDelegate=new MyDelegate(Method1);
MyDelegate+=Method2;
MyDelegate+=Method3;
也可以委托其他类中的方法,如下:
MyDelegate myDelegate=new MyDelegate(Func.Function1);
//或者写成MyDelegate myDelegate=Func.Function1;
myDelegate+=Func.Function2;
myDelegate+=Func.Function3;
委托的执行就是按顺序执行被委托的所有对象。Invoke()是用于同步调用委托对象的显示调用方法,或者隐式调用。如下。调用时就会将委托的方法Method1、Method2、Method3按顺序执行一遍。
myDelegate.Invoke(); //显示调用
myDelegate( ); //隐式调用
事件(Event)
事件(Event)是特殊的委托,为委托提供了封装。它一方面允许从类的外部增加或删除绑定的方法,另一方面又不 允许从类的外部来触发,只能在事件源内部触发。它为委托对象隐式地建立add_XXX、remove_XXX两个方法,用作注册与注销事件的处理方法。而且事件对应的变量成员将会被视为private变量,外界无法超越事件所在对象直接访问它们,这使事件具备良好的封装性。
如下,在类中定义事件和触发事件的条件:
public delegate void MyDelegate(string name);
public class Manager
{
public event MyDelegate MyEvent; //定义事件
public void Execute(string name)
{//管理触发事件的条件
if (MyEvent != null)
MyEvent(name);
}
}
在事件中添加绑定方法并触发执行事件:
class MyEvent
{
Manager manager= new Manager();
Manager.MyEvent += new MyDelegate(Method); //绑定事件处理方法
Manager.Execute("唐小墨同学"); //触发事件
public static void Method(string name)
{
Alarm();// 写一些事件绑定的方法
}
}
观察者模式
属于行为型模式的一种,即建立一个或多个观察者去订阅或监听某一对象,当对象的行为触发事件时就会通知观察者,然后观察者执行相应的行为。详见设计模式(五)观察者模式_刘望舒的博客
其实这种方式我们早就接触过,比如UI组件中的Button、检测碰撞的OnTriggerEnter等等。
在机械臂场景中的机械臂示教模式 (记录角度自动旋转)中,用到了Unity的UI控件的Button、Slider等控件,都涉及到了事件监听的语句:
Button.onClick.Addlistener(recordAngle);
给Button按钮添加一个观察者,一旦Button被按下,观察者就会被触发,从而回调recordAngle函数,去执行相应的工作。请注意,这句代码是写在Start中的,所以只要定义了一个事件的观察者,就不需要在Update()、FixedUpdate()中不断去刷新它,可以节约系统资源。
在项目中建立事件中心的必要
以上的委托、事件、观察者模式,它们的作用其实是一致的,就是使代码的结构更加合理和高效。否则需要写一长串的“if……else……”判断或者繁琐的过程性代码。因此,每个项目中都需要建立一个管理事件、回调等方法的事件中心,一旦发生鼠标移动(或者VR手柄输入)、键盘输入,或者在工业场景中发生触发传感器等任何事件时,都可以统一在事件中心进行管理,提高代码的重用性,最重要的是可以节约系统的运行资源。文章来源:https://www.toymoban.com/news/detail-463537.html
下一篇将实现一个事件中心的搭建文章来源地址https://www.toymoban.com/news/detail-463537.html
到了这里,关于UnityVR--EventManager--事件中心1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!