| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> Unity中的UGUI源码解析之事件系统(1)-概述 -> 正文阅读 |
|
[游戏开发]Unity中的UGUI源码解析之事件系统(1)-概述 |
Unity中的UGUI源码解析之事件系统(1)-概述从今天开始通过几篇文章一步步深入, 围绕事件系统展开对UGUI源码的解析. 网上大部分文章讲的是事件系统是什么, 怎么用. 我的文章会在这些基础之上进一步探讨其原理和设计思想, 当然, 只是我的一家之言, 也不一定正确(特别是不同版本之间的差异是存在的). 所以还是希望能给大家提供的是一种思路, 省去大量实践和抠细节的研究, 大家可以基于我的研究(也可以纠正), 发散出自己的理解. 好了, 下面开始今天的内容. 广义的事件系统是指Unity中整个事件相关的一整个系统, 而狭义的事件系统指的是一个专门的组件: EventSystem. 下面我们会使用事件系统和EventSystem来对应描述两者. 本文将对事件系统和其主要的模块做一个系统性的概述. 概述根据官方文档的说明, 手册( 事件系统主要负责:
整个事件系统由很多角色组成, 互相协作来完成事件相关工作. 事件系统主要由以下几个部分组成:
下面我们分别简要说明. EventSystemEventSystem相当于事件系统的管理器, 负责协调各个模块. EventSystem主要负责:
EventSystem需要与其它组件协同工作, 根据任务不同, 搭配的组件不同, Unity建议我们一个场景只有一个EventSystem, 当然, 这并不是强制要求. 输入模块(InputModule)输入模块主要处理输入, 也是整个事件系统的主要部分, Unity提供了下面的几个类来抽象输入的处理:
指针输入(PointerInput)指针输入设备指的是那些在2d表面追踪输入位置的设备, 事件系统支持的指针输入有: 触摸, 鼠标和触控笔. 详情在这里. 虽然这里面讲的是新的输入系统, 但是概念是一样的, 不影响理解. 射线投射器(Raycaster)这就是经常听到的射线检测器, 原理是在点击或者触摸的位置发射一条射线, 然后收集所有被射线穿透的对象, 然后返回最可能(比如最接近屏幕的对象)的目标. 供事件系统使用. Unity提供了三种射线投射器:
只要场景中存在射线投射器, 然后从输入模块发出检测请求, 那么事件系统就会使用它, 这是通过射线管理器( 每种射线投射器都有特定的检测对象, 不需要我们过多关心. 消息系统UGUI使用了新的消息系统来处理消息分发, 这个实现很巧妙, 没有使用常规的显得比较繁重的消息系统, 而是使用了一个静态的类 各种支持的事件事件系统所有的事件都实现
通过在Monobehavior脚本上实现这些接口就能接收事件. 也可以直接实现
事件触发器(EventTrigger)上面添加事件的方式需要脚本实现事件接口, 我们也可以通过事件触发器来拦截所有事件, 处理我们想要处理的事件. 有两种事件事件触发器的方式, 一个是通过继承, 然后重写指定的事件方法, 如下:
另一种是通过设置委托的方式, 如下:
通过事件触发器的方式来注册和处理事件更加灵活, 但是会拦截所有事件, 导致事件无法传递到父对象, 在使用的时候需要注意. 总结本文对事件系统和其主要的模块做了系统性的概述. 各个部分细节会在接下来的文章单独介绍. 总的来说事件系统就是由事件系统管理器, 射线投射器, 输入模块, 消息系统组成, 各个部分相互协作, 各司其职. 总体上来看, Unity的事件系统做的比Cocos的要更简洁一点, 当然, 也缺少了很多灵活性, 这一部分需要通过自定义输入模块来达到. 但是大部分场景已经足够使用了. 很难说哪个更好一点. 在整个事件系统的最后一个部分, 我会尝试给出两者的优劣对比, 互相借鉴, 希望能碰撞出不同的火花. 下一篇文章会详细介绍EventSystem组件. 好了, 今天就是这样, 希望对大家有所帮助. |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 14:45:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |