Event Manager and Event Listener

??

我已经读完关于事件的文件,看着一对夫妇的教程,但是还有一些我仍然不握。在我见过的Event Managers事件管理器示例,将触发该事件的方法是在同一个class 作为事件管理器。喜欢这个:

using UnityEngine;
 using System.Collections;

 public class EventManager : MonoBehaviour {

     public delegate void CheckpointHandler(int id);
     public static event CheckpointHandler checkpointReached;

     void OnGUI () {

         if( GUI.Button(new Rect(5,5,150,40),"Checkpoint")){
             checkpointReached(555);
         }

     }

 }

所以在这里,EventManager 不仅定义委托和事件,而且还创建一个按钮,将触发该事件。

这是什么让我困惑。以为 EventManager 将什么也不做只是是定义的事件。然后你会解雇那些来自其他脚本的事件。有没有办法做到这一点吗?

我不喜欢此示例设置,因为它似乎必须将"EventManager"脚本附加到每个可能可以触发事件的对象的方式。如果有多个对象,可以引发同一事件吗?我需要将相同的"EventManager"附加到每一个人吗?

我想我可能会回答我自己的问题,但也许有人可以告诉我,是否这将执行成功与否。

我成立了 EvenManager 中的事件触发器,作为公共方法,然后使用拖放的方法将 EventManager 置于其他类,使其方法可为任何想要触发的事件。所以我的设置如下所示 (所有这些都连接到独立游戏对象):

using UnityEngine;
 using System.Collections;

 public class EventManager : MonoBehaviour {
 //Here I define the delegates, events and the triggers that can be called to fire the event.

     public delegate void CheckpointHandler(int id);
     public static event CheckpointHandler checkpointReached;

     public void hitCheckpoint (int id){
         if (checkpointReached != null)
             checkpointReached(id);
     }
 }
 using UnityEngine;
 using System.Collections;

 public class EventTrigger : MonoBehaviour {
 /******
 In this class I can set up a method that will access the EventManager
 (which has been dropped onto the em variable)
 and fire the hitCheckpoint method,
 which in turn sends the checkpointReached event.
 ******/

     public EventManager em;

     void OnGUI () {

         if( GUI.Button(new Rect(5,5,150,40),"Checkpoint    ")){
             em.hitCheckpoint(555);
         }

     }
 }

 using UnityEngine;
 using System.Collections;

 public class EventListener : MonoBehaviour {
     //This script listens for the event and prints a message to the log.

     void OnEnable () {
         EventManager.checkpointReached += HandleEventManagercheckpointReached;
     }

     void OnDisable(){
         EventManager.checkpointReached -= HandleEventManagercheckpointReached;
     }

     void HandleEventManagercheckpointReached (int id)
     {
         Debug.Log ("Checkpoint reahed. ID is: " + id);
     }
 }
时间: 2024-08-02 15:13:59

Event Manager and Event Listener的相关文章

Weak Event Manager

问题 通过传统的方式监听事件(即C#的+=语法),有可能会导致内存泄漏,原因是事件源会持有对事件Handler所在对象的强引用从而阻碍GC回收它,这样事件handler对象的生命周期受到了事件源对象的影响. 解决方案 此问题有两个解决办法:1) 确保通过-=语法反注册事件处理器 2)使用弱事件模式(Weak Event Pattern).本文主要讲解Weak Event Pattern. 在使用Weak Event Pattern时,主要涉及到两个类:WeakEventManager和IWeak

event.currentTarget与event.target

无意中在一段源码里看到event.currentTarget这个属性,这个与熟悉的event.target还是有所差别的. event.target是指事件发生的源,在哪个元素上发生的.event.currentTarget 就是通过addEventListener绑定的DOM元素.事件是可以通过冒泡进行传递的.通过冒泡触发的事件event.target 跟event.currentTarget是不相同的元素. 引用网上的一段英文:Event objects also have target p

关于js中return false、event.preventDefault()和event.stopPropagation()

在平时项目中,如果遇到需要阻止浏览器默认行为,大家经常会用return false;和event.preventDefault()来阻止,但对它俩的区别还是有些一知半解,于是看了文档,查了些资料,在此总结下它俩的区别,顺便带上event.stopPropagation()一起区分下. 一.原生js中: 关于return false和preventDefault: 在W3C Document Object Model Events Specification1.3版本中提到过: The Event

BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 远程Event Receivers App级别生命周期

BEGINNING SHAREPOINT? 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers  远程Event Receivers App级别生命周期 微软在新的云App模型中对Apps生命周期的管理投入了大量的投资.

event.target和event.currentTarget的区别

target:触发事件的元素.currentTarget:事件绑定的元素.两者在没有冒泡的情况下,是一样的值,但在用了事件委托的情况下,就不一样了,例如: <ul id="ulT"> <li class="item1">fsda</li> <li class="item2">ewre</li> <li class="item3">qewe</li&g

javascript坐标:event.x、event.clientX、event.offsetX、event.screenX 用法

clientX 设置或获取鼠标指针位置相对于窗口客户区域的 x 坐标,其中客户区域不包括窗口自身的控件和滚动条. clientY 设置或获取鼠标指针位置相对于窗口客户区域的 y 坐标,其中客户区域不包括窗口自身的控件和滚动条. offsetX 设置或获取鼠标指针位置相对于触发事件的对象的 x 坐标. offsetY 设置或获取鼠标指针位置相对于触发事件的对象的 y 坐标. screenX 设置或获取获取鼠标指针位置相对于用户屏幕的 x 坐标. screenY 设置或获取鼠标指针位置相对于用户屏幕

event.srcElement与event.target的区别

window.event.srcElement与window.event.target 都是指向触发事件的元素,它是什么就有什么样的属性 srcElement是事件初始化目标html元素对象引用,因为事件通过元素层次冒泡,可以在任意一层进行处理, 有了元素的引用,就可以读写改元素的属性. IE浏览器支持window.event.srcElement , 而firefox支持window.event.target: event.srcElement从字面上可以看出来有以下关键字:事件,源 他的意思

event.currentTarget与event.target的差别介绍

event.currentTarget与event.target的差别想大家在使用的时候不是非常在意.本文以測试代码来解说它门之间的不同.即,event.currentTarget指向事件所绑定的元素,而event.target始终指向事件发生时的元素.翻译的不专业,好拗口啊,还是直接上測试代码吧: <div id="wrapper"> <a href="#" id="inner">click here!</a>

BEGINNING SHAREPOINT&amp;#174; 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 远程Event Receivers App级别生命周期

BEGINNING SHAREPOINT? 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers  远程Event Receivers App级别生命周期 微软在新的云App模型中对Apps生命周期的管理投入了大量的投资. BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 远程Event Receivers App级别生命周期