Unity 事件系统使用

事件系统

上篇简单介绍了一下事件系统,这篇介绍一下怎么使用。

UI使用事件系统

最常见的使用莫过于我们直接使用的UGUI,当我们创建任意一个UI元素的时候,会自动创建一个Canvas,一个EventSystem。这就启用了unity的事件系统。

EventSystem上面挂载有前面我们说的EventSystem组件负责管理事件系统各模块。StandaloneInputModule组件负责处理输入模块。

Canvas上的GraphicRaycaster,前面我们也说过是用于决定事件接收目标的。例如鼠标点击在哪个UI元素上。

三个选项:

  1. 是否忽略背着的元素(勾选之后按钮,绕Y轴转180度之后,不能接收点击事件)

  2. 阻止射线检测的物体类型(Canvas的Render Mode选择Screen Space-Camera,UI之前有个Cube,然后该选项选择3D话,UI不能接收点击事件。)

  3. 阻止射线检测的物体层(基于选项2。UI之前有两个Cube1,Cube2,一个层cube1,一个层cube2,然后该选项选择cube1的话,Cube1会阻挡UI接收点击事件,Cube2不会。)

非UI使用事件系统

怎样在非UI模块使用事件系统。

需要用到前面提到的PhysicsRaycaster,加到摄像机上(别忘了保证场景里头一定要有EventSystem)。

接下来有两种方式:

  1. 在MonoBehaviour中实现上文提到的支持的接口例如:IPointerEnterHandler,IPointerExitHandler等。

  1. 第二种就是利用unity内置的EventTrigger组件

可以添加多种事件,并绑定目标物体的脚本上目标方法。

同样利用EventTrigger组件可以通过代码动态绑定事件

通过EventSystem.current.IsPointerOverGameObject()可判断鼠标是否悬浮在可接收事件消息的物体上。

欢迎扫码关注公众号,获得持续更新

顺手求个赞,分享一下呗~

本文分享自微信公众号 - 游戏人的开发分享(No_2SeeYou)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Twitter的分布式自增ID算法snowflake (Java版)

概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移