zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    MSSQL错误1069解决方法
    Xamarin的Mono for Android目前可运行于MIPS上
    Oracle大数据机和连接器产品支持与Hadoop和Cloudera Manager集成
    百度1
    恒生电子
    IGT中国
    经典笔试题——a和&a有什么区别
    腾讯HTTP协议1
    腾讯http协议2
    面向对象的三大特征
  • 原文地址:https://www.cnblogs.com/mcyushao/p/13707137.html
Copyright © 2011-2022 走看看