Unity ugui整体设计分析

发表于2018-10-12
评论0 1.8k浏览
下面和大家说说Unity ugui的整体设计分析。其中Unity ugui 整个架构中最主要是三个主要模块:InputModules输入模块、Raycasters射线模块、Event模块。

InputModules输入模块

1、输入模块中BaseInputModule是抽象基类,有一个Process抽象方法,如果自己去扩展的话,继承BaseInputModule去实现Process这个方法就好,目前UGUI系统中已经实现了触屏、鼠标、键盘输入等。当然目前VR比较火,自己完全可以自定义一个??去实现自己想要的输入。

2、我们在使用UGUI时场景中会有EventSystem物体上面绑定StandaloneInputModule这个类就是Unity已经实现的触摸、和键盘输入

3、输入模块将接收的数据后首先去获取自身EventSystem组件,调用RaycastAll方法此方法会通过静态公共类RaycasterManager得到所有BaseRaycaster(射线基类)通过它调用Raycast方法得到满足射线碰撞到的物体。此时输入组件模块和射线模块联系起来。通过排序然后得到第一个满足条件的对象。然后调用

ExecuteEvents.ExecuteHierarchy();方法将刚刚得到满足的对象进行检测如果当前没有IEventSystemHandler事件,就向上找父节点,直到直到然后调用ExecuteEvents.Execute()将当前的事件比如是点击、按下、抬起、滑动等,传递给包含IEventSystemHandler的对象处理。事件分发就是向上查找直到找到IEventSystemHandler

Raycasters射线模块

1、射线模块中BaseRaycaster是抽象基类,主要是从事件摄像机一般是场景的主摄像机发射射线,得到所有碰撞事件。

2、每个Canvas上都会GraphicRaycaster组件,这是Unity已经实现的射线模块。里面有些属性可以设置是否可以被射线检测到等(这里特殊说明下:这里的碰撞实际上不是真正的碰撞是计算当前坐标是否符合)

3、PhysicsRaycaster才是真正的摄像碰撞检测,它需要绑定Camera,一般适合包含在MainCamera上。适合UI中包含3D物体,进行一些事件检测。

Event模块

1、基类IEventSystemHandler,主要实接口IPointerEnterHandler,IPointerExitHandler,IBeginDragHandler等。一些常用的控件如Button等,都是现实了它的接口。

总结

以上就是Unity ugui整体设计分析,三者是靠RaycasterManager联系起来,射线会在OnEnable中添加自己到RaycasterManager的s_Raycasters列表中,OnDisable会移出。输入事件在Process中循环获取RaycasterManager中s_Raycasters,遍历并执行调用Raycast。到此就是上面的说的得到IEventSystemHandler对象并分发事件了。
来自:https://blog.csdn.net/st75033562/article/details/52460960

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

0个评论