EventSystem(转)

1.EventSystem(转自:https://blog.csdn.net/ecidevilin/article/details/52503595

 

BaseInputModule是一个抽象类,PointerInputModule继承自它,同样也是抽象类,而StandaloneInputModule和TouchInputModule又继承自PointerInputModule。

EventSystem会每一帧都处理这些输入模块:m_CurrentInputModule.Process();

而设置m_CurrentSelected的时候,会通过ExecuteEvents这个类对之前的对象执行一个被取消事件,且对新选中的对象执行一个被选中事件。这就是OnSelect和OnDeselect两个方法的由来。

而这个方法实在PointerInputModule中使用的,如果点击(或触摸)事件移动的时候,被该事件影响的对象也会发生变化,通过RaycastAll方法(传入的eventData中的position属性作为点E)获得到第一个被射线照射到的对象,如果与之前的对象不同,便变更对象(同时会回调原对象的OnPointerExit和新对象的OnPointerEnter方法)。

public static EventSystem current { get; set; } //因为是static,所以创建多个EventSystem也只有一个current,所以会报警告

2.ExecuteEvents事件的执行(转自:https://blog.csdn.net/ecidevilin/article/details/52510373

EventInterface声明了一系列interface(可以参考我之前的博客关于接口的介绍),如果经常接触UI的话,我相信你对这些接口一定不陌生。例如IPointerEnterHandler(指针进入事件接口)。一个组件添加这个接口的继承之后,再实现OnPointerEnter方法,便可以接收到指针进入事件,也就是当鼠标滑入对象所在的区域之后,便会回调OnPointerEnter方法。这些接口全都继承自IEventSystemHandler,而后者也是声明在EventInterface里的接口。

ExecuteHierarchy方法会通过GetEventChain获取target的所以父对象,并对这些对象(包括target)执行Execute方法。
GetEventHandler会遍历目标对象及其父对象,判断他们是否包含某个指定接口,如果包含则作为返回值返回。而判断方法是CanHandleEvent,通过GetEventList方法获取target上的T类型的组件列表,判断列表数量不为零。GetEventHandler主要在输入模块里被调用,用于获取某个输入事件的响应对象。

EventInterface声明了很多接口,每个接口都对应着一个事件。这些事件是由输入模块产生的,而归根结底大部分是通过Input这个类的各种属性和静态方法获取了数据才生成了事件。

导航事件可用情况下,按下上下左右键,执行moveHandler,按下确认键执行submitHandler,按下取消键执行cancelHandler。

https://blog.csdn.net/ecidevilin/article/details/52782501

 

posted @ 2020-09-21 18:11  mc宇少  阅读(199)  评论(0编辑  收藏  举报