由于工作需要到持续按键,所以了解了一下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>();// 实例化delegatestrigger.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就可以实现相关方法方法

转载于:https://www.cnblogs.com/llstart-new0201/p/7102868.html

unity UI事件相关推荐

  1. Unity UI架构设计理念

    Unity UI架构设计理念 https://www.jianshu.com/p/e64347dff4fe Unity UI架构设计理念 1.以ARPG为例,多个场景会反复出现相同的"UI窗 ...

  2. 全面理解 Unity UI 系统

    原地址:http://www.cnblogs.com/whitecat/p/4159815.html 随着 Unity 4.6 发布,新 UI 系统终于与大家见面了.这篇文章将不会介绍如何使用按钮.滚 ...

  3. Unity基础笔记(3)—— Unity UI系统

    Unity UI系统 一.UI系统介绍 1. Unity2D 和 UI的区别 Unity2D:主要基于 SpriteRenderer 和 2D物理系统等组成. UI:由 Canvas 以及 各种 UI ...

  4. 2023年Unity UI教程

    2023年Unity UI教程 Unity 新 UI 系统 UI 工具包的完整概述 课程英文名:Modern Unity UI with UI Toolkit 此视频教程共10.0小时,中英双语字幕, ...

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

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

  6. UI事件与内容,舞台与演员

    UI事件:创建/清除/显示/隐藏/填充内容/位置变化/形态变化/尺寸变化/颜色变化/ 非UI事件:点击/输入/拖动/ 转载于:https://www.cnblogs.com/jcode/p/62469 ...

  7. UNITY UI字体模糊的原因

    UNITY UI字体模糊的原因 根本原因:像素少. 解决办法:字体的 font size将像素设置大些,然后用scale来缩放大小 posted on 2018-06-21 15:11 时空观察者9号 ...

  8. Blazor UI事件和渲染

    目录 介绍 代码 组件渲染 Blazor UI事件 Blazor UI事件模式 总结 附录 介绍 对于刚接触Blazor的程序员来说,最常见的问题之一是UI事件和相关的渲染过程.此类问题每天都会发布在 ...

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

    unity UI如何开启(显示)或者关闭(隐藏)Panel界面,相信大家都是知道的,但是如何做最好呢? 可能大家一般开启/关闭界面的方法就是直接SetActive吧.这样做通常是可以的,简答快速地解决 ...

最新文章

  1. python真的很厉害吗-python为什么这么牛?Python真有这么好的前景?
  2. (chap1 网络基础知识)一些概念
  3. [Linux Mysql] Linux下Mysql的基本操作
  4. boost::statechart模块无效图表测试
  5. 木糖醇、可口可乐零度:可怕的传闻
  6. 算法稳定币项目Basis Cash将于2月7日启动V2迁移计划
  7. QoS中拥塞避免机制详解——WRED技术详解
  8. Ghost module
  9. 未来已来!域乎“区块链+产业应用赋能精英论坛”成功举办
  10. C盘容量不够,扩容办法
  11. iVMS-4200 Vs区别_异地恋 VS 网恋,哪个更难坚持到最后?| Newth互动158
  12. 信任是高效工作的基石,但是得来却非常不易
  13. latex的段落间距设置
  14. IntelIj IDEA下同一个包中的类不能互相引用的问题
  15. 什么是信令?什么是信令网?(转)
  16. 设置元素旋转中心点(transform-origin)
  17. E - Mafia CodeForces - 348A (推公式,思维)
  18. 中字符转换中文乱码的处理方法
  19. 排序模型进阶-WideDeepWDL模型导出
  20. uniapp使用地图

热门文章

  1. R-大数据分析挖掘(5-R基础回顾)
  2. [raywenderlich教程]
  3. Sandy引擎学习笔记:摄影机
  4. 设计模式 之 创建者
  5. std::shared_ptr之deleter的巧妙应用
  6. 读书笔记(javascript 高级程序设计)
  7. LeetCode(53):Maximum Subarray
  8. 实践:创建异步 HTTP 处理器
  9. 如何使用git命令行上传项目到github
  10. mysql select 效能_MYSQL的联合查询最好是少用,效能差异巨大