输入模块
输入模块主要涉及到BaseInputModule、PointerInputModule、StandaloneInputModule、TouchInputModule这些类。
比如处理触摸事件时,EventSystem在OnUpdate()方法,执行ProcessTouchEvents()方法时,遍历所有的input.touchCount(input为BaseInput类),取得Touch对象。Touch对象包括,唯一ID:fingerId,位置信息等。
Touch touch = input.GetTouch(i);
取出的Touch对象,传入GetTouchPointerEventData方法,
GetTouchPointerEventData(touch, out pressed, out released);
在方法中,pointerData.position = input.position;
eventSystem.RaycastAll(pointerData, m_RaycastResultCache);
通过RaycastAll方法(传入的PointerEventData的position作为点E,从相机到点E投射一条射线,)获得到第一个被射线照射到的对象。最后执行ProcessTouchPress()方法。
在处理鼠标事件时,EventSystem在OnUpdate()方法中,执行ProcessMouseEvent()方法,通过GetMousePointerEventData方法获取鼠标左中右键的MouseState,通过RaycastAll方法(传入的PointerEventData的position作为点E,从相机到点E投射一条射线,)获得到第一个被左键射线照射到的对象,然后执行左键的ProcessMousePress(),ProcessMove(),ProcessDrag(),以及中键和右键的ProcessMousePress(),ProcessDrag().
这些事件是由输入模块产生的,而归根结底大部分是通过Input这个类的各种属性和静态方法获取了数据才生成了事件。
比如:
当鼠标或触摸进入、退出当前对象时执行pointerEnterHandler、pointerExitHandler。
在鼠标或者触摸按下、松开时执行pointerDownHandler、pointerUpHandler。
在鼠标或触摸松开并且与按下时是同一个响应物体时执行pointerClickHandler。
在鼠标或触摸位置发生偏移(偏移值大于一个很小的常量)时执行beginDragHandler。
在鼠标或者触摸按下且当前对象可以响应拖拽事件时执行initializePotentialDrag。
对象正在被拖拽且鼠标或触摸移动时执行dragHandler。
对象正在被拖拽且鼠标或触摸松开时执行endDragHandler。
鼠标或触摸松开且对象未响应pointerClickHandler情况下,如果对象正在被拖拽,执行dropHandler。
当鼠标滚动差值大于零执行scrollHandler。
当输入模块切换到StandaloneInputModule时执行updateSelectedHandler。(不需要Input类)
当鼠标移动导致被选中的对象改变时,执行selectHandler和deselectHandler。
UI组件的继承关系图