Unity 基于EventTrigger的UI事件系统
一、主要思路
其实主要原理就是通过继承EventTrigger并重写相应的函数实现的,只是对其做了一个封装,更方便使用了;
当对某个GameObject使用UIEventManager.Get()函数时,会自动检查该对象是否挂载了UIEventManager脚本,如果没有,会动态的帮他将该脚本挂载上去(动态挂载多少会影响性能),具体代码如下:
public static UIEventManager Get(GameObject obj){UIEventManager temp = obj.GetComponent<UIEventManager>();if (temp == null){temp = obj.AddComponent<UIEventManager>();}return temp;}
为每一个UI响应事件申明唯一对应的UnityEvent做为回调函数,例如,对于点击事件,可以这样声明:
public UnityAction<PointerEventData> OnClickCallBack;
接下来重写对应的事件,在函数体中触发回调函数即可实现对于某一事件的响应了,例如,同样是对于点击事件:
public override void OnPointerClick(PointerEventData eventData){base.OnPointerClick(eventData);if (OnClickCallBack != null){OnClickCallBack(eventData);}}
其他的事件都以上面的格式逐个添加就可以了,EventTrigger可以重写的函数包括以下:
二、使用方法
假如你想让你UI中的某个图片实现点击功能,在你的某个UI的控制模块中(例如MVC框架的Controller),可以这样写:
UIEventManager.Get(closeBtn).OnClickCallBack += CloseView;
closeBtn即为你要点击的那个图片,CloseView即为点击事件的回调函数,如下:
public void CloseView(PointerEventData data){Debug.Log("click!!!");}
三、完整代码
做为示范,只实现了点击事件,鼠标移入,鼠标离开,如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;namespace EventSys
{public class UIEventManager : EventTrigger{public static UIEventManager Get(GameObject obj){UIEventManager temp = obj.GetComponent<UIEventManager>();if (temp == null){temp = obj.AddComponent<UIEventManager>();}return temp;}public UnityAction<PointerEventData> OnClickCallBack;public UnityAction<PointerEventData> OnPointerEnterCallBack;public UnityAction<PointerEventData> OnPointerLeaveCallBack;public override void OnPointerClick(PointerEventData eventData){base.OnPointerClick(eventData);if (OnClickCallBack != null){OnClickCallBack(eventData);}}public override void OnPointerEnter(PointerEventData eventData){base.OnPointerEnter(eventData);if (OnPointerEnterCallBack != null){OnPointerEnterCallBack(eventData);}}public override void OnPointerExit(PointerEventData eventData){base.OnPointerExit(eventData);if (OnPointerLeaveCallBack != null){OnPointerLeaveCallBack(eventData);}}}
}
和事件管理器申明在同一个命名空间中,关于事件管理器,可以转到以下链接:
Unity 基于UnityEvent实现轻量级事件管理器
Unity 基于EventTrigger的UI事件系统相关推荐
- Unity——基于MVC的UI框架
Unity--基于MVC的UI框架 前言 今天来学习一下MVC框架思想在Unity项目中的应用 MVC框架 概念 MVC全名是Model View Controller,是模型(Model)-视图(V ...
- Unity MVC设计模式与UI背包界面制作
Unity MVC设计模式与UI背包界面制作 MVC设计模式非常适合UI的架构,UI界面相当于View,UI转换控制相当于Controller,UI上面的数据变换相当于Model.MVC设计模式在软件 ...
- Unity 基于eventTriggers的3D场景交互系统
Unity 基于eventTriggers的3D场景交互系统 Unity里的3D项目有时候需要大量的交互,而且是无UI的交互. 这时候可以像UI系统里,使用eventTrigger去制作交互系统.但是 ...
- 【PC端vue ui框架学习】vue项目如何使用基于vue的UI框架Element
看了下iView之后,顺便看了看同样基于vuejs的ui框架Element,那么在vue项目中应该如何使用Element呢?以下做简单的记录. 官网定义:Element,一套为开发者.设计师和产品经理 ...
- 【PC端vue ui框架学习】vue项目如何使用基于vue的UI框架iview
今晚看了一下基于vuejs的ui框架iview,感觉UI挺好看的,那么在vue项目中应该如何使用iview呢?以下做简单的记录. 首先安装iview: $ npm install iview --sa ...
- android 画布裁剪,一种基于Android系统对UI控件进行轮廓剪裁及美化的方法与流程...
本发明涉及Android应用的技术领域,特别涉及一种基于Android系统对UI控件进行轮廓剪裁及美化的方法. 背景技术: 目前,随着智能电视的普及,Android应用层出不穷,而那些表现形式单一.传 ...
- 一行代码完成定时任务调度,基于Quartz的UI可视化操作组件 GZY.Quartz.MUI
前言 之前发布过第一个版本,有兴趣的可以去看看: NET Core 基于Quartz的UI可视化操作组件 GZY.Quartz.MUI 简介 GitHub开源地址:l2999019/GZY.Quart ...
- 基于vue(element ui) + ssm + shiro 的权限框架
zhcc 基于vue(element ui) + ssm + shiro 的权限框架 引言 心声 现在的Java世界,各种资源很丰富,不得不说,从分布式,服务化,orm,再到前端控制,权限等等玲琅满目 ...
- bootstrap的表单验证 vue_分享几个基于Vue的UI库和开源项目
阅读本文大概需要 3.6 分钟. 题图:Evan You(尤雨溪)的工作室 在编程的世界里,你遇到的 90% 问题,别人都遇到过,并且提供了比较优秀的解决方案.我们无需一行一行代码从零开始创建一个项目 ...
最新文章
- 江湖又现中科大少年班的传说
- 230:Borrowers
- boost::geometry::promote_integral用法的测试程序
- 阿里云实时计算,前世功,今生能!
- 电脑卡顿不流畅怎么解决_电脑用久了卡怎么办?学会这四招解决你的电脑卡顿问题...
- 页面缓存处理的几种方法
- Java BigDecimal Rounding Mode
- mysql去掉小数点多余0_mysql数据库个性化需求:版本号排序
- 【英语学习】【Level 07】U03 Amazing wonders L4 The Qin Dynasty legacy
- 主流框架的搭建(VUE,React)
- 医疗大数据为何发展如此缓慢
- 杭州仁和金融中心远程预付费电能管理系统的设计与应用-安科瑞耿敏花
- 【多元统计分析】05.多元统计的“三大分布”
- html2canvas ios 15.0截屏 变黑 页面刷新
- svn和git有什么区别
- 惠普MFP774dn扫描功能
- 允许用户使用 MAK 密钥激活 Office 2010 批量许可版
- 75道程序员面试逻辑思维题及答案解析
- 【SpringBoot整合Dubbo和Zookeeper】
- 2020年6月六级翻译:红楼梦
热门文章
- R语言使用plot函数可视化数据、使用type参数自定义设置可视化的类型(数据点和线关系的类型)、设置type参数为s则为阶梯状显示
- Managing Non-Volatile Memory in Database Systems
- Python的双下划方法
- 基于51单片机的智能停车场泊车车位系统LCD12864显示proteus仿真原理图PCB
- 整理的汉字及拼音、编码数据文件,依据拼音声母进行归类共计2万多条
- 运行shell脚本报错:“syntax error near unexpected token 的解决方法”
- py文件和ipynb文件互相转换
- No view found for id 0x7f0f00d7 for fragment
- 如何看待是大数据技术?
- Lombok报错:You aren‘t using a compiler supported by lombok, so lombok will not work and has been disab