由于工作需要到持续按键,所以了解了一下unity UI事件,本文主要转载于http://www.cnblogs.com/zou90512/p/3995932.html?utm_source=tuicool&utm_medium=referral,并对相关问题进行解释。

我们最常用到的就是unity的button组件,其实button组件所响应的事件为unity众多ui事件中的PointerClick事件,unity的ui事件如下图所示:

实现响应事件有以下三种:

(一)在相关UI控件上挂脚本,脚本继承相关事件对应的接口,并在接口函数中完成相应方法的实现即可。

(二)在相关控件上添加EventTrigger组件,点击AddNewEnvetType添加事件类型,即对应的UI事件,然后就可以挂载响应的方法。

(三)便是在程序实现。第一步也需要在相关控件上添加EventTrigger组件,然后添加监听。代码如下

  void Start()
{
var trigger = transform.gameObject.GetComponent<EventTrigger>();
if (trigger == null)
trigger = transform.gameObject.AddComponent<EventTrigger>(); // 实例化delegates
trigger.triggers = new List<EventTrigger.Entry>(); // 定义需要绑定的事件类型。并设置回调函数
EventTrigger.Entry entry = new EventTrigger.Entry();
// 设置 事件类型
entry.eventID = EventTriggerType.PointerClick;
// 设置回调函数
entry.callback = new EventTrigger.TriggerEvent();
UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(OnScriptControll);
entry.callback.AddListener(callback);
// 添加事件触发记录到GameObject的事件触发组件
trigger.triggers.Add(entry);
}

在此理解一下此段代码:我们要添加一个我们想要的事件,就需要对EventTrigger添加内容,添加的内容有两个,一个为事件类型,一个为对应事件实现的函数,或者说方法。

EventTrigger通过Entry类打包了这两个内容,eventID绑定事假类型,callback绑定事件对应的方法。通过unityaction定义相关委托以及绑定的方法,通过添加监听AddListener来实现。

由于在众多图片或者text上实现点击事件是则需要每一个都添加点击事件,比较麻烦,借鉴别人的EventListener来

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events; public class UGUIEventListener : EventTrigger
{
public UnityAction<GameObject> onClick;
//可以重载EventTrigger的其他虚方法来实现点击拖动等事件
public override void OnPointerClick(PointerEventData eventData)
{
base.OnPointerClick(eventData); if(onClick != null)
{
onClick(gameObject);
}
} public static UGUIEventListener Get(GameObject go)
{
UGUIEventListener listener = go.GetComponent<UGUIEventListener>(); if (!listener)
listener = go.AddComponent<UGUIEventListener>(); return listener;
}
}

给text和image添加事件

using UnityEngine;
using UnityEngine.UI; public class UGUIButtonClick : MonoBehaviour
{
public Text textTitle;
public Image imageTitle; private void Awake()
{
UGUIEventListener.Get(textTitle.gameObject).onClick = OnClick;
UGUIEventListener.Get(imageTitle.gameObject).onClick = OnClick;
} void OnClick(GameObject go)
{
if(go == textTitle.gameObject)
{
Debug.Log("Text clicked");
}
else if(go == imageTitle.gameObject)
{
Debug.Log("Image clicked");
}
}
}

PS:三维物体实现上述点击事件需要在Main Camera上挂载physics raycaster组件,然后在三维物体上挂载EventTrigger就可以实现相关方法方法

unity UI事件的更多相关文章

  1. UI事件监听的击穿

    什么是UI事件监听的击穿 在游戏视图中,有两个UI界面叠在一起的时候,单击一个空白处,却触发了被覆盖在下层了UI界面中的单击事件,这就是单击击穿了上层界面. 假设场景中放置了一个箱子,单击箱子会触发一 ...

  2. 关于 Unity UI 中 GraphicRaycaster.Raycast 数量巨大的问题

    有时候会发现 Unity UI 非常耗时,在 Profiler 中可以轻易的看到 UI 中 的 GraphicRaycaster.Raycast 单帧调用可以成百上千,甚至好几千,帧速率前不忍赌,一关 ...

  3. Unity UI 基础【译】

    https://unity3d.com/cn/learn/tutorials/topics/best-practices/fundamentals-unity-ui?playlist=30089 理解 ...

  4. Unity UI性能优化技巧

    本文将介绍一些提升Unity UI性能的技巧.更多优化技巧,可以观看Unity工程师Ian Dundore在Unite Europe 2017的演讲<使用Unity性能提升技巧>. 1.划 ...

  5. Unity UI on the HoloLens

    Following the steps under "Required configuration" will allow Unity UI to continue to work ...

  6. UI事件之load

    load事件属于CSS3规范中的UI事件,load事件处理程序在页面元素和资源(html/script/link/img等)全部加载完成后在window上触发,或在img元素加载完成后再img元素上触 ...

  7. Android学习笔记--处理UI事件

    Handling UI Events 在Android里, 有不只一种方式可以截获用户与你的应用程序交互的事件. 在你的界面上处理事件时,你需要捕获用户与某个View实例交互时所产生的事件.View类 ...

  8. unity UI如何开启(显示)或者关闭(隐藏)Panel界面最好?

    https://segmentfault.com/a/1190000012357091 unity UI如何开启(显示)或者关闭(隐藏)Panel界面,相信大家都是知道的,但是如何做最好呢? 可能大家 ...

  9. Javascript高级编程学习笔记(61)—— 事件(5)UI事件

    UI事件 UI事件是指那些不一定与用户操作有关的事件 这些事件在DOM规范出现之前,都是以各种不同的形式存在于不同的浏览器 而在DOM事件中为了保证向后兼容,现有的UI事件如下: DOMActivat ...

随机推荐

  1. Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档

    随着前后端分离架构和微服务架构的流行,我们使用Spring Boot来构建RESTful API项目的场景越来越多.通常我们的一个RESTful API就有可能要服务于多个不同的开发人员或开发团队:I ...

  2. 2019年十大开源WEB应用防火墙点评

    2019年十大开源WEB应用防火墙点评 随着WEB应用的爆炸式成长和HTTPS加密的普及,针对网络应用层的攻击,像SQL注入.跨站脚本攻击.参数篡改.应用平台漏洞攻击.拒绝服务攻击等越来越多,传统的防 ...

  3. 构建于 B/S 端的 3D 摄像头可视化监控方案

    前言 随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的同时,在监控系统中面临着严峻的现状问 ...

  4. 一步一步带你在VS 2017中配置OpenGL

    在VS2017环境中配置OpenGL,我们分三步:配置GLFW.配置GLAD.导出项目模板. 配置GLFW 1.首先下载GLFW,点击这里,进入Github下载. 或者 点击这里从百度云下载,提取码为 ...

  5. ng 目录详解

    在新建的项目中需要我们关注的就是package.json和src文件夹 node_modules (项目所需依赖)是package.json所创建的模块安装到node_modules中 src:是代码 ...

  6. Linux-rhel-server-7.4-Mysql-5.7安装记录

    解压下载的tar包: tar -xf mysql-5.7.19-1.el7.x86_64.rpm-bundle.tar 安装一下rpm包: sudo rpm -ivh mysql-community- ...

  7. 移动端的<meta>标签

    <head> <meta charset="UTF-8" /> <!-- 页面关键词 --> <meta name="keywo ...

  8. BZOJ 2535: [Noi2010]Plane 航空管制2

    Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小X表示很不满意. 在这次来烟台的路上 ...

  9. SQL SERVER数据库内,需要序列号进行排序时,排序方法

    举例如下: SELECT ROW_NUMBER()OVER(ORDER BY (SELECT 0)) AS ROWNUM,* FROM YXHIS2018..TBMZGHMX201801 --不排序S ...

  10. .NET Core使用App.Metrics监控消息队列(一):初探

    一.简介 App Metrics是一个开放源代码和跨平台的.NET库,用于记录应用程序中的指标.App Metrics可以在.NET Core或也支持.NET 4.5.2的完整.NET框架上运行. A ...