事件系统
上篇简单介绍了一下事件系统,这篇介绍一下怎么使用。
UI使用事件系统
最常见的使用莫过于我们直接使用的UGUI,当我们创建任意一个UI元素的时候,会自动创建一个Canvas,一个EventSystem。这就启用了unity的事件系统。
EventSystem上面挂载有前面我们说的EventSystem组件负责管理事件系统各模块。StandaloneInputModule组件负责处理输入模块。
Canvas上的GraphicRaycaster,前面我们也说过是用于决定事件接收目标的。例如鼠标点击在哪个UI元素上。
三个选项:
是否忽略背着的元素(勾选之后按钮,绕Y轴转180度之后,不能接收点击事件)
阻止射线检测的物体类型(Canvas的Render Mode选择Screen Space-Camera,UI之前有个Cube,然后该选项选择3D话,UI不能接收点击事件。)
阻止射线检测的物体层(基于选项2。UI之前有两个Cube1,Cube2,一个层cube1,一个层cube2,然后该选项选择cube1的话,Cube1会阻挡UI接收点击事件,Cube2不会。)
非UI使用事件系统
怎样在非UI模块使用事件系统。
需要用到前面提到的PhysicsRaycaster,加到摄像机上(别忘了保证场景里头一定要有EventSystem)。
接下来有两种方式:
- 在MonoBehaviour中实现上文提到的支持的接口例如:IPointerEnterHandler,IPointerExitHandler等。
- 第二种就是利用unity内置的EventTrigger组件
可以添加多种事件,并绑定目标物体的脚本上目标方法。
同样利用EventTrigger组件可以通过代码动态绑定事件
通过EventSystem.current.IsPointerOverGameObject()可判断鼠标是否悬浮在可接收事件消息的物体上。
欢迎扫码关注公众号,获得持续更新
顺手求个赞,分享一下呗~
本文分享自微信公众号 - 游戏人的开发分享(No_2SeeYou)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。