输入模块

输入模块

输入模块主要涉及到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组件的继承关系图

你可能感兴趣的:(输入模块)