个人博客查看。

一、 消息系统

新的 UI 系统使用一种消息系统来取代 SendMessage。该系统是纯 C# 系统,旨在解决 SendMessage 存在的一些问题。该系统使用可在 MonoBehaviour 上实现的自定义接口来指示组件能够从消息系统接收回调。调用时会指定目标游戏对象;该调用将在游戏对象的所有(实现了指定接口以据此发出该调用的)组件上发出。借助消息系统可传递自定义用户数据,并可指定事件应在游戏对象层级视图中传播的距离:应该仅为指定的游戏对象执行,还是应该在子对象和父对象上也执行。除此之外,消息框架还提供 helper 函数来搜索和查找实现了给定消息接口的游戏对象。

消息系统是通用型系统,不仅可用于 UI 系统,还可用于一般游戏代码。添加自定义消息事件相对简单,借助 UI 系统用于所有事件处理的相同框架即可实现。

如何定义自定义消息?

如果希望定义自定义消息,此过程相对简单。在 UnityEngine.EventSystems 命名空间中,有一个名为“IEventSystemHandler”的基本接口。从此接口扩展的任何内容都可以视为通过消息系统接收事件的目标。

要发送消息,可使用一个静态 helper 类来执行此操作。在参数方面,需要消息的目标对象、一些特定于用户的数据以及一个映射到所需目标消息接口中特定函数的仿函数 (functor)。

ExecuteEvents.Execute<ICustomMessageTarget>(target, null, (x,y)=>x.Message1());

此代码将在游戏对象目标上实现了 ICustomMessageTarget 接口的所有组件上执行 Message1 函数。ExecuteEvents 类的脚本文档中介绍了执行函数的其他形式,例如在子对象或父对象中执行。

二、 支持的事件

事件系统支持许多事件,并可在用户编写的自定义输入模块中进一步自定义它们。

独立输入模块和触摸输入模块支持的事件由接口提供,通过实现该接口即可在 MonoBehaviour 上实现这些事件。如果配置了有效的事件系统,则会在正确的时间调用事件。

  • IPointerEnterHandler - OnPointerEnter - 当指针进入对象时调用
  • IPointerExitHandler - OnPointerExit - 当指针退出对象时调用
  • IPointerDownHandler - OnPointerDown - 在对象上按下指针时调用
  • IPointerUpHandler - OnPointerUp - 松开指针时调用(在指针正在点击的游戏对象上调用)
  • IPointerClickHandler - OnPointerClick - 在同一对象上按下再松开指针时调用
  • IInitializePotentialDragHandler - OnInitializePotentialDrag - 在找到拖动目标时调 用,可用于初始化值
  • IBeginDragHandler - OnBeginDrag - 即将开始拖动时在拖动对象上调用
  • IDragHandler - OnDrag - 发生拖动时在拖动对象上调用
  • IEndDragHandler - OnEndDrag - 拖动完成时在拖动对象上调用
  • IDropHandler - OnDrop - 在拖动目标对象上调用
  • IScrollHandler - OnScroll - 当鼠标滚轮滚动时调用
  • IUpdateSelectedHandler - OnUpdateSelected - 每次勾选时在选定对象上调用
  • ISelectHandler - OnSelect - 当对象成为选定对象时调用
  • IDeselectHandler - OnDeselect - 取消选择选定对象时调用
  • IMoveHandler - OnMove - 发生移动事件(上、下、左、右等)时调用
  • ISubmitHandler - OnSubmit - 按下 Submit 按钮时调用
  • ICancelHandler - OnCancel - 按下 Cancel 按钮时调用

三、射线投射器

事件系统需要一种方法来检测当前输入事件需要发送到的位置,而此方法由射线投射器 (Raycaster) 提供。给定屏幕空间位置的情况下,射线投射器将收集所有潜在目标,确定它们是否在给定位置下,然后返回最接近屏幕的对象。提供了几种类型的射线投射器:

  • 图形射线投射器 (Graphic Raycaster) - 用于 UI 元素,位于画布上,并在画布中搜索
  • 2D 物理射线投射器 (Physics 2D Raycaster) - 用于 2D 物理元素
  • 物理射线投射器 (Physics Raycaster) - 用于 3D 物理元素

当场景中存在并启用了射线投射器时,只要从输入模块发出查询,事件系统就会使用该射线投射器。

如果使用多个射线投射器,那么这些射线投射器都会进行针对性投射,并且结果将根据与元素的距离进行排序。

Unity 事件系统相关推荐

  1. unity事件系统3,三个博客脚本要一起用

    public enum EventSendType {downDone }

  2. 【Unity + Google Cardboard】 VR环境配置

    翻译一下google cardboard接unity的开发文档 前面 一直想尝试开发一个VR游戏试试-- Unity的官方文档在这里 一开始看的时候分不清各种VR设备,如果你也是的话--比如只有一个能 ...

  3. Unity3D开发之OnPointerClick事件

    OnPointerClick是unity事件系统自带的点击推送事件.继承IPointerClickHandler接口,并在脚本中实现接口,点击挂此脚本的物体系统会调用实现的OnPointerClick ...

  4. Unity 3.Adventure Game tutorial(事件系统、动画状态机、库存、条件、反应、交互、游戏状态)

    双语机翻视频: https://www.bilibili.com/video/av34383045/ 在官网asset Store下载了完整工程,和pdf asset Store:https://as ...

  5. Unity 3D 消息事件系统 NotificationCenter、CEventDispatcher事件分发机制

    版本:unity 5.4.1  语言:C# 实战核心技术这本书来到了第三章,这里给了一个消息事件系统,这是几乎每一个游戏系统都会用到的一个常用技术,非常好用,但如果你add之后忘记remove的话.. ...

  6. Unity中的UGUI源码解析之事件系统(2)-EventSystem组件

    Unity中的UGUI源码解析之事件系统(2)-EventSystem组件 今天介绍我们的第一个主角: EventSystem. EventSystem在整个事件系统中处于中心, 相当于事件系统的管理 ...

  7. Unity中的UGUI源码解析之事件系统(8)-输入模块(中)

    Unity中的UGUI源码解析之事件系统(8)-输入模块(中) 接上一篇文章, 继续介绍输入模块. Unity中主要处理的是指针事件, 也就是在2d平面上跟踪指针设备输入坐标的的事件, 这一类事件有鼠 ...

  8. Unity中的UGUI源码解析之事件系统(9)-输入模块(下)

    Unity中的UGUI源码解析之事件系统(9)-输入模块(下) 接上一篇文章, 继续介绍输入模块. StandaloneInputModule类是上一篇文章介绍的抽象类PointerInputModu ...

  9. Unity中的UGUI源码解析之事件系统(6)-RayCaster(下)

    Unity中的UGUI源码解析之事件系统(6)-RayCaster(下) 接上一篇文章, 继续介绍投射器. GraphicRaycaster GraphicRaycaster继承于BaseRaycas ...

最新文章

  1. [LeetCode]题解(python):025-Reverse Nodes in k-Group
  2. loj10165. 「一本通 5.3 例 3」Windy 数
  3. 3.14 01串排序
  4. 后疫情时代,这家在线教育机构如何乘“云”而上
  5. ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)
  6. nginx websocket wss 连接失败 failed_Nginx 配置WSS 解析与实战
  7. CUDA Fortran for Scientists and Engineers第二版翻译
  8. 自己动手写一个业务实体生成器(1)
  9. 计算机制作ppt考试题,计算机二级PPT真题:制作计算机发展简史PPT
  10. redis雪崩击穿穿透
  11. 如何系统学习Spring框架
  12. [HDU - 3709] Balanced Number (数位dp)
  13. 你真的认为iPhone只是一部手机?苹果惊天秘密之 四
  14. 苹果最新发布的16 英寸 MacBook Pro有哪些亮点和不足之处?
  15. 条形码EAN-13码和EAN-8码的原理
  16. 电力系统的遥测、遥信、遥控、遥调的含义
  17. bootstrap3的jumbotron和glyphicon glyphicon-*的用法
  18. torch.arange
  19. 小米路由器R1D改造记录-开放ssh
  20. V-REP笔记:重力加速度的修改

热门文章

  1. 「收藏」人工智能中常见机器学习算法优缺点有哪些?
  2. 大话DevOps监控,团队如何选择监控工具?
  3. Ghostxpsp3电脑爱好者纯净版V9.9
  4. Flume 安装使用(自己总结) 吐槽CSDN 对Markdown 的mermaid 语法支持不完整
  5. TL431在电源方面的应用
  6. 夜神模拟器如何连接电脑WiFi
  7. 高性能混凝土配合比设计
  8. 【Javaweb 2】JSP,Filter,Listener,AJAX,Vue
  9. 调用百度API自动生成春联
  10. 主板点不亮 复位BIOS_小白莫慌,一文带你玩转主板BIOS!(上)