zoukankan      html  css  js  c++  java
  • UNITY_UGUI

    UGUI

    1. 事件系统-EventSystem

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

    处理与管理点击、键盘输入、触摸等事件

    EventSystem源码声明了

    private List<BaseInputModule> m_SystemInputModules = new List<BaseInputModule>();
    private BaseInputModule m_CurrentInputModule;

    BaseInputModule是抽象类
      PointerInputModule继承自BaseInputModule,也是抽象类
        StandaloneInputModule继承自PointerInputModule,面向PC/Mac/Linux standalone平台的输入模块
        TouchInputModule继承自PointerInputModule,面向Android/iOS等移动平台的输入模块

    EventSystem在每一帧都会处理这些输入模块 -- 调用TickModules(),更新每一个InputModule
      遍历m_SystemInputModules,判断这些module是否支持当前平台且可用
      1. 若有符合条件的module,便赋值给m_CurrentInputModule并break;
      2. 若没有符合条件的module,便选取第一个支持当前平台的module作为m_CurrentInputModule
        若m_CurrentInputModule的值发生变化,且m_CurrentInputModule!=null,便调用m_CurrentInputModule.Process()
        该方法会将各种输入事件传递给EventSystem当前选中的GameObject(m_CurrentSelected)
        m_CurrentSelected大部分情况是Selectable组件
          (在设置m_CurrentSelected时,会通过ExecuteEvents类对之前选中的对象执行一个被取消事件OnDeselect(),
          对新选中的对象执行一个被选中事件OnSelect())

    EventSystem的RaycastAll()方法,使用射线从相机到某个点(设为点E)照射在UI上
      然后对被照射到的所有对象进行排序,大致是远近排序。

    IsPointerOverGameObject()方法用于判断是否点击在UI上

    EventSystem的public static EventSystem current { get; set; } 属性
      当一个EventSystem组件OnEnable()时会将该对象赋值给current;
      OnDisable()时,若current==this,则会将current赋值为null
      这也是在UnityEditor中有多个EventSystem时会报警告的原因

    2. 执行事件

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

    EventSystem中事件的执行 -- 涉及到EventInterface接口和ExecuteEvents类

    EventInterface声明了一系列接口,比如IPointerEnterHandler
      一个组件添加IPointerEnterHandler的继承后,并实现OnPointerEnter()方法,便可在鼠标进入对象时,触发回调OnPointerEnter()方法。
      这些接口全部继承自IEventSystemHandler,而IEventSystemHandler也是声明在EventInterface中的接口

    这些接口都会在ExecuteEvents中被调用。
      ExecuteEvents是一个静态类,声明了一个delegate EventFunction,这是一个泛型委托,可以是不同类型的handler
      比如

    private static readonly EventFunction<IPointerEnterHandler> s_PointerEnterHandler = Execute;
    
    private static void Execute(IPointerEnterHandler handler, BaseEventData eventData) {
        handler.OnPointerEnter(ValidateEventData<PointerEventData>(eventData));
    }

     

     

     

     

     

     

  • 相关阅读:
    23个精美的的国外网站设计作品推荐欣赏
    javascript / js数据类型,数据类型转换
    让人兴奋的视差滚动(Parallax Scrolling)效果网站分享
    手机网页应用的交互设计
    qq空间等闪动的文字怎么做?
    用CSS实现首字下沉效果,仿word的首字下沉
    35 套精美的 PSD 图标素材,网页素材下载
    使用纯CSS实现圆角边框并完美兼容
    推荐给 JavaScript 开发者十款超级有用的工具来提高客户体验
    40款非常漂亮的 HTML5 & CSS3 网站模板免费下载欣赏
  • 原文地址:https://www.cnblogs.com/FudgeBear/p/10816872.html
Copyright © 2011-2022 走看看