一、主要思路

其实主要原理就是通过继承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事件系统相关推荐

  1. Unity——基于MVC的UI框架

    Unity--基于MVC的UI框架 前言 今天来学习一下MVC框架思想在Unity项目中的应用 MVC框架 概念 MVC全名是Model View Controller,是模型(Model)-视图(V ...

  2. Unity MVC设计模式与UI背包界面制作

    Unity MVC设计模式与UI背包界面制作 MVC设计模式非常适合UI的架构,UI界面相当于View,UI转换控制相当于Controller,UI上面的数据变换相当于Model.MVC设计模式在软件 ...

  3. Unity 基于eventTriggers的3D场景交互系统

    Unity 基于eventTriggers的3D场景交互系统 Unity里的3D项目有时候需要大量的交互,而且是无UI的交互. 这时候可以像UI系统里,使用eventTrigger去制作交互系统.但是 ...

  4. 【PC端vue ui框架学习】vue项目如何使用基于vue的UI框架Element

    看了下iView之后,顺便看了看同样基于vuejs的ui框架Element,那么在vue项目中应该如何使用Element呢?以下做简单的记录. 官网定义:Element,一套为开发者.设计师和产品经理 ...

  5. 【PC端vue ui框架学习】vue项目如何使用基于vue的UI框架iview

    今晚看了一下基于vuejs的ui框架iview,感觉UI挺好看的,那么在vue项目中应该如何使用iview呢?以下做简单的记录. 首先安装iview: $ npm install iview --sa ...

  6. android 画布裁剪,一种基于Android系统对UI控件进行轮廓剪裁及美化的方法与流程...

    本发明涉及Android应用的技术领域,特别涉及一种基于Android系统对UI控件进行轮廓剪裁及美化的方法. 背景技术: 目前,随着智能电视的普及,Android应用层出不穷,而那些表现形式单一.传 ...

  7. 一行代码完成定时任务调度,基于Quartz的UI可视化操作组件 GZY.Quartz.MUI

    前言 之前发布过第一个版本,有兴趣的可以去看看: NET Core 基于Quartz的UI可视化操作组件 GZY.Quartz.MUI 简介 GitHub开源地址:l2999019/GZY.Quart ...

  8. 基于vue(element ui) + ssm + shiro 的权限框架

    zhcc 基于vue(element ui) + ssm + shiro 的权限框架 引言 心声 现在的Java世界,各种资源很丰富,不得不说,从分布式,服务化,orm,再到前端控制,权限等等玲琅满目 ...

  9. bootstrap的表单验证 vue_分享几个基于Vue的UI库和开源项目

    阅读本文大概需要 3.6 分钟. 题图:Evan You(尤雨溪)的工作室 在编程的世界里,你遇到的 90% 问题,别人都遇到过,并且提供了比较优秀的解决方案.我们无需一行一行代码从零开始创建一个项目 ...

最新文章

  1. 江湖又现中科大少年班的传说
  2. 230:Borrowers
  3. boost::geometry::promote_integral用法的测试程序
  4. 阿里云实时计算,前世功,今生能!
  5. 电脑卡顿不流畅怎么解决_电脑用久了卡怎么办?学会这四招解决你的电脑卡顿问题...
  6. 页面缓存处理的几种方法
  7. Java BigDecimal Rounding Mode
  8. mysql去掉小数点多余0_mysql数据库个性化需求:版本号排序
  9. 【英语学习】【Level 07】U03 Amazing wonders L4 The Qin Dynasty legacy
  10. 主流框架的搭建(VUE,React)
  11. 医疗大数据为何发展如此缓慢
  12. 杭州仁和金融中心远程预付费电能管理系统的设计与应用-安科瑞耿敏花
  13. 【多元统计分析】05.多元统计的“三大分布”
  14. html2canvas ios 15.0截屏 变黑 页面刷新
  15. svn和git有什么区别
  16. 惠普MFP774dn扫描功能
  17. 允许用户使用 MAK 密钥激活 Office 2010 批量许可版
  18. 75道程序员面试逻辑思维题及答案解析
  19. 【SpringBoot整合Dubbo和Zookeeper】
  20. 2020年6月六级翻译:红楼梦

热门文章

  1. R语言使用plot函数可视化数据、使用type参数自定义设置可视化的类型(数据点和线关系的类型)、设置type参数为s则为阶梯状显示
  2. Managing Non-Volatile Memory in Database Systems
  3. Python的双下划方法
  4. 基于51单片机的智能停车场泊车车位系统LCD12864显示proteus仿真原理图PCB
  5. 整理的汉字及拼音、编码数据文件,依据拼音声母进行归类共计2万多条
  6. 运行shell脚本报错:“syntax error near unexpected token 的解决方法”
  7. py文件和ipynb文件互相转换
  8. No view found for id 0x7f0f00d7 for fragment
  9. 如何看待是大数据技术?
  10. Lombok报错:You aren‘t using a compiler supported by lombok, so lombok will not work and has been disab