UGUI按钮的几种响应方式
来源:互联网 发布:cassandra数据库下载 编辑:程序博客网 时间:2024/05/24 04:46
1、 可视化绑定
这种方式就是写好一个带有public方法的脚本,然后在Button的OnClick事件位置添加对应的脚本及事件。这个方式的弊端是容易丢失绑定,适合少量的响应。
2、 脚本监听
脚本代码对按钮进行监听:btn.onclick.AddListener(“监听方法名”);然后实现对应的方法。但是当想要监听方法可以传参是该怎么写呢?
public class ButtonTest : MonoBehaviour { private Button btn; void Start () { btn = transform.GetComponent<Button>(); //以下四种写法其实只是两种写法,就是delegate和lamda表达式 btn.onClick.AddListener(delegate { OnButtonClick(gameObject); }); btn.onClick.AddListener(delegate() { OnButtonClick(gameObject); }); btn.onClick.AddListener(()=>OnButtonClick(gameObject)); btn.onClick.AddListener(() => { OnButtonClick(gameObject); }); } private void OnButtonClick(GameObject gameObject) { print(gameObject.name); }}
通过delegate或者lamda表达式就可以达成目的。
3、 监听多种事件
有时候我们不止需要点击事件,还需要鼠标进入、悬浮、退出等事件。
这需要用到UGUI的组件EventTrigger,以下是实现点击事件的具体代码。
using UnityEngine;using UnityEngine.EventSystems;using UnityEngine.UI;[RequireComponent(typeof(EventTrigger))] public class EventHandle : MonoBehaviour { private Button btn; private EventTrigger trigger; void Start () { btn=transform.GetComponent<Button>(); trigger= transform.GetComponent<EventTrigger>(); //触发入口注册 EventTrigger.Entry entry = new EventTrigger.Entry(); //触发类型 entry.eventID = EventTriggerType.PointerClick; //触发事件注册 entry.callback = new EventTrigger.TriggerEvent(); //监听触发 entry.callback.AddListener(ClickFuc); //还需要把触发入口entry添加到EventTrigger的触发队列中才能响应 trigger.triggers.Add(entry); } private void ClickFuc(BaseEventData arg0) { Debug.Log("按钮被点击了"); }}
上面的脚本我们挂载需要监听的button上面就可以了。那么如何绑定别的事件呢?只要把触发类型改变即可,当前是Pointer.Click,可以改成Pointer.Enter/Exit/Up等。然后如果你想要多种事件同时存在,就需要更多的触发入口注册、触发类型,事件注册,监听,这是比较麻烦的地方。
4、 实现MonoBehavior接口
MonoBehaviour封装了事件接口,可以实现接口的方式来绑定事件,如下:
using UnityEngine;using UnityEngine.EventSystems; public class ButtonEventHandle : MonoBehaviour,IPointerClickHandler,IPointerEnterHandler{ public void OnPointerClick(PointerEventData eventData) { if (eventData.pointerId == -1) print("鼠标左键点击了"); if (eventData.pointerId == -2) print("鼠标右键点击了"); } public void OnPointerEnter(PointerEventData eventData) { print("鼠标进入了按钮"); }}
这种方式也很容易实现,但是每个UI元素都需要创建一个MonoBehaviour来监听各个事件,重复代码就显得很笨拙了。
5、 方式4的加强,利用Delegate和Event做一个通用类UIEventListener。通用类的目的就是把接口预先实现好,而具体实现还没确定。
using UnityEngine;using UnityEngine.EventSystems; public class UIEventListener : MonoBehaviour,IPointerClickHandler{ //定义一个事件代理 public delegate void UIEvent(GameObject go); //定义点击事件 public event UIEvent OnClick; public void OnPointerClick(PointerEventData eventData) { OnClick(this.gameObject); }}
然后我们写一个具体测试类来调用通用类,添加相应的事件。
using UnityEngine;using UnityEngine.UI;public class UIEventTest : MonoBehaviour { private Button btn; private UIEventListener listener; // Use this for initialization void Start () { btn = transform.GetComponent<Button>(); //添加监听通用类组件 listener =transform.gameObject.AddComponent<UIEventListener>(); //添加对应监听事件 listener.OnClick += Listener_OnClick; } private void Listener_OnClick(GameObject go) { print("用户点击了"+go.name); }}
我们可以看到很简单,只要在测试脚本中添加具体的监听事件并实现即可。这种方式主要是通过委托和事件再一次封装,优点就是不用重复继承接口实现接口,重复打代码浪费时间。
- UGUI按钮的几种响应方式
- JS实现响应按钮的几种方式
- Android Intent和按钮响应事件的几种方式
- ugui 添加事件的几种方式
- UGUI 之 不规则按钮的响应区域
- 实现按钮响应的几种方法
- Unity UGUI 按钮绑定事件的方式
- UGUI点击事件的几种代码添加方式
- 返回按钮的几种实现方式
- 点击按钮的几种触发方式
- Button按钮响应事件的2种实现方式
- android响应事件(按钮)的三种方式
- android响应事件(按钮)的三种方式
- 安卓点击按钮的三种响应方式
- Android响应按钮事件的4种方式
- android按钮点击的四种响应方式
- 在android中button响应的几种方式
- spring mvc 响应界面跳转的几种方式
- asp网站在iis7上配制后打不开!在官网看到的结果
- 使用Pyinstaller将python脚本打包成exe文件
- PL/SQL乱码问题PL/SQL打开数据库:数据库名及数据库中文字段都乱码。
- JavaScript入门指南---(八)、响应事件
- TensorFlow实战学习笔记2
- UGUI按钮的几种响应方式
- jQuery学习教程二十五: jQuery
- jsp页面中的非空验证
- Kafka 消息不能接收的问题
- 机器学习与数据挖掘之ROC与AUC
- Hadoop中使用Hive和Hbase的关系和区别
- Java中Socket上的Read操作阻塞问题
- UVa_Fractions Again?!
- 数据库锁机制