unity ugui 整体设计分析

一、整体描述


unity ugui 整个架构中最主要是三个主要模块:InputModules输入模块、Raycasters射线模块、Event模块。

InputModules输入模块

  • 输入模块中BaseInputModule是抽象基类,有一个Process抽象方法,如果自己去扩展的话,继承BaseInputModule去实现Process这个方法就好,目前UGUI系统中已经实现了触屏、鼠标、键盘输入等。比如:VR自己完全可以自定义一个  去实现自己想要的输入。我们在使用UGUI时场景中会有EventSystem物体上面绑定StandaloneInputModule这个类就是Unity已经实现的触摸、和键盘输入
  • 输入模块将接收的数据后首先去获取自身EventSystem组件,调用RaycastAll方法此方法会通过静态公共类RaycasterManager得到所有BaseRaycaster(射线基类)通过它调用Raycast方法得到满足射线碰撞到的物体。此时输入组件模块和射线模块联系起来。通过排序然后得到第一个满足条件的对象。然后调用ExecuteEvents.ExecuteHierarchy();方法将刚刚得到满足的对象进行检测如果当前没有IEventSystemHandler事件,就向上找父节点,直到直到然后调用ExecuteEvents.Execute()将当前的事件比如是点击、按下、抬起、滑动等,传递给包含IEventSystemHandler的对象处理。事件分发就是向上查找直到找到IEventSystemHandler

Raycasters射线模块

  • 射线模块中BaseRaycaster是抽象基类,主要是从事件摄像机一般是场景的主摄像机发射射线,得到所有碰撞事件。
  • 每个Canvas上都会GraphicRaycaster组件,这是Unity已经实现的射线模块。里面有些属性可以设置是否可以被射线检测到等(这里特殊说明下:这里的碰撞实际上不是真正的碰撞是计算当前坐标是否符合)
  • PhysicsRaycaster才是真正的摄像碰撞检测,它需要绑定Camera,一般适合包含在MainCamera上。适合UI中包含3D物体,进行一些事件检测。

Event模块

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

总结

1、三者是靠RaycasterManager联系起来,射线会在OnEnable中添加自己到RaycasterManager的s_Raycasters列表中,OnDisable会移出。输入事件在 Process中循环获取RaycasterManager中s_Raycasters,遍历并执行调用Raycast。到此就是上面的说的得到IEventSystemHandler对象并分发事件了。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一零壹0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值