Unity 事件系统使用

Wesley13
• 阅读 552

事件系统

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

UI使用事件系统

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

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

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

Unity 事件系统使用

三个选项:

  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等。

Unity 事件系统使用

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

Unity 事件系统使用

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

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

Unity 事件系统使用

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

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

Unity 事件系统使用

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

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

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
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
Karen110 Karen110
2年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
Unity横屏
Android下发现Unity里面的Player设置,并不能完全有效,比如打开了自动旋转,启动的时候还是会横屏,修改XML添加以下代码<applicationandroid:icon"@drawable/ic\_launcher"                    android:label"@string/app\_name"
Stella981 Stella981
2年前
Locust 安装
Locust介绍  Locust是一个易于使用、分布式的负载测试工具,它可以对网站或其他系统进行负载测试,并计算出一个系统能够承受多少的并发用户。Locust完全基于事件,因此可以在一台机器上支持数千名并发用户,与其他基于事件的应用相比,它不使用回调。与jmeter、loadrunner相比,Locust不需要笨重的UI或臃肿的xml
Wesley13 Wesley13
2年前
Unity事件系统
\1.前言Unity中事件/委托有着广泛的应用,本文通过封装一个简易的事件的系统,来统一管理消息的传递。此功能在简易应用或者事件较少的体现不出太好的作用,但是对于事件应用较多时,可以减少脚本之间的耦合。通过此事件系统架起不同脚本之间的桥梁,对于大量应用事件场景中具有良好的效果。\2.事件系统\2.1事件管理类管理事件的
Stella981 Stella981
2年前
Noark入门之异步事件
引入异步事件主要是为了各模块的解耦,每当完成一个动作时,向系统发布一个事件,由关心的模块自己监听处理,可选择同步处理,异步处理,延迟处理。何时发布事件,当其他模块关心此动作时<br比如获得道具时,任务系统模块要判定完成进度,BI模块需要上报等等都可以监听此事件,已达模块解耦0x00事件源一个实现xyz.noark.core.event
Wesley13 Wesley13
2年前
Unity中EventTrigger使用
在Unity中,点击场景中的模型我们往往需要检测是否点击在了UI上,这时我们需要进行一系列的判断,往往效果还不好,因此我在场景中模型的点击也使用了EventTrigger,EventTrigger我们在UI上的使用比较常见,但是它也可以用于场景点击,并且能屏蔽点击到UI又响应了模型的点击事件,以下是点击事件的组件脚本usi