看到很多人依然还是通过最原始的方法给button绑定事件并处理,这种通过Find往子集一个个的查找,获取到后再绑定事件这种操作很费事,有些人则是对查找对象写了个方法自动往子集遍历更方便获取对象,但还是要一个个绑定。所以看到这里给大家说个简单的方式,要说的这种方式其实也很简单能够看到MVC的核心思想的影子。

先来讲解下思路再看代码,这样如果思路清晰了,不看代码你也知道我想怎么做。

思路是 将在初始化时获取到所有Button然后进行统一绑定到一个处理方法,在这个方法里处理一系列的工作,根据button的Name就可知道当前被点击的是哪个button,从而进行处理。

所以在初始化的时候获取并绑定button这个工作可以写在一个基类里,这样继承后的类就只需要关注事件的处理。而绑定事件的所有Button我们都不需要一个个查找获取到后再绑定事件了。

表达能力有限,写下代码应该能了解我想说的。

1.写一个基类,用于对子集下所有Button进行绑定事件

using UnityEngine;
using UnityEngine.UI;
public class AbsButton : MonoBehaviour
{ protected Button[] BtnArr;
protected virtual void Awake()
{
//获取子集下所有Button的集合
BtnArr = transform.GetComponentsInChildren<Button>(true); //将所有Button的点击事件绑定到HandlerNotification方法上
for (int i = ; i < BtnArr.Length; i++)
{
Transform TARGET = BtnArr[i].transform; BtnArr[i].onClick.AddListener(() => { HandlerNotification(TARGET); });
}
} public virtual void HandlerNotification(Transform target)
{ } }

至此已经可以看到这个对象下子集中的所有button我们都不用一个个查找了,而且也都绑定了点击事件。下一步我们就只需要写一个类继承他,然后再其中专注于事件的处理。且Button只负责发送自身Tranform并不需要知道其他的。

2.写一个处理类,并继承AbsButton 通过HandlerNotification处理Butoon事件

public class PageHandler : AbsButton
{
public override void HandlerNotification(Transform target)
{
switch (target.name)
{
//通过不同的名称可以知道当前点击了哪个button然后就可以对其进行处理. case "Btn_NextModel":
print("Test");
target.gameObject.SetActive(false);
break;
case "Btn_SayHello":
print("Hello"+target);
break;
}
//(别忘了父级里还有个Button集合,这个运用起来还是很方便的,比如我对一个button点击后会显示当前选择标记,其他的button就需要隐藏当前选择标记)
} }

这样处理起来是不是简单又简洁。比如有一个父级下有很多button要处理,我们只需写一个处理类脚本挂在父级上就可以处理所有事件了。

即使要处理的Button很多这个处理类要写的内容很多,但是这种逻辑条理清晰的处理方式依然是好的方式。

好的,希望都能跳过繁琐的原始方式,让自己更轻松些。

再提一个,HandlerNotification这个方法要灵活使用,比如添加一个过滤条件使符合过滤条件的button都被过滤掉不处理。

Unity Button事件的简洁处理的更多相关文章

  1. unity UI事件

    由于工作需要到持续按键,所以了解了一下unity UI事件,本文主要转载于http://www.cnblogs.com/zou90512/p/3995932.html?utm_source=tuico ...

  2. Android实现Button事件的处理

    Android实现Button事件的处理 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 代码实现 首先是最基本的线性布局,给每个控件设立id值,以供代 ...

  3. jQuery(二)button事件改变标签值

    button事件改变标签值 例子一: <html> <head> <script type="text/javascript" src="/ ...

  4. Android开发之Button事件实现方法的总结

    下面介绍Button事件实现的两种方法 main.xml <?xml version="1.0" encoding="utf-8"?> <Li ...

  5. lua 中处理cocos2dx 的button 事件

    lua 中处理cocos2dx 的button 事件 2014-05-08 09:44:32|  分类: lua |举报 |字号 订阅   1.引入这个类:require "GuiConst ...

  6. flex中Button事件中的e.target

    关于flex中的Button事件中的e.target. 今天想在事件中调用模块中的对象通过e.target获取单击的这个Button对象,但是可能是使用var btn:Button = e.targe ...

  7. NGUI3.x Button事件

    代码调用事件 UI搭建 1.首先创建一个Button,和一个的GameObeject命名为GUIClikEvent 2.方法一:创建一个NGUIClickTest.cs,绑定在Button上 Clic ...

  8. Unity3D热更新之LuaFramework篇[03]--prefab加载和Button事件

    在上一篇文章 Unity3D热更新之LuaFramework篇[02]--用Lua创建自己的面板 中,我介绍了LuaFramework加载面板的方法,但这个方法并不适用于其它Prefab资源,在这套框 ...

  9. 两种unity双击事件

    有时候需要用到双击事件,而unity未提供双击控件,在此提供两种双击事件方法,进攻参考: 1)此方法为通过unityevent来实现 首先新建image(或其他不带点击事件的控件),添加如下脚本,然后 ...

随机推荐

  1. 分布式一致性算法2PC和3PC

    为了解决分布式一致性问题,产生了不少经典的分布式一致性算法,本文将介绍其中的2PC和3PC.2PC即Two-Phase Commit,译为二阶段提交协议.3PC即Three-Phase Commit, ...

  2. MSMQ 队列消息和死信队列

    日志消息 日志队列可以保存你操作过的消息的备份.它的好处是,一但发现前面的操作失败,可以从日志队列中重新创建出原先的消息对象,然后再进行操作. 例如,向远方发送一个消息对象,然后对方返回一个失败的确认 ...

  3. 海外aws-ubuntu-16.04系统使用ansible安装tidb

    本以为按照官方文档会比较顺利,没想到还是遇到了几个坑,毕竟pingcap不能考虑到所有问题 环境: 1.ubuntu:16.04LTS 2.python:2.7 小坑:因为第一次使用ubuntu,没想 ...

  4. SQL SERVER 2019新功能

    1.错误代码行 BEGIN TRY    SELECT 1/0END TRYBEGIN CATCH    THROW END CATCH2.二级制截断列名值 chose语法

  5. Java好的的工具类:MD5

    import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5 ...

  6. 【CZYZ 20160819】背包

    题目描述 蛤布斯有nn个物品和一个大小为mm的背包,每个物品有大小和价值,它希望你帮它求出背包里最多能放下多少价值的物品. 输入数据 第一行两个整数 n,mn,m. 接下来 nn 行每行两个整数 xi ...

  7. R数据导入导出(一): read.table()和read.csv()的区别

    之前也参考过一些资料,虽然是这么简单的两个buildin,还是仔细对比了一下,我有两张txt,都是从cube中导出的,就意味着每一列的列数是不一样的.R语言官方文档中有这样一句话不知道大家注意到了没有 ...

  8. idea2018.1.5激活教程

    这是地址  链接: https://pan.baidu.com/s/1lx5AfMjADYFcQARi7_GNIw 密码: nvfi 1下载解压到任意目录(前提你能找到) 2将复制到 bin目录下 如 ...

  9. fopen特殊模式r+, w+, a+辨析

    fopen模式分两大类,即 TEXT模式:r, w, a, r+, w+, a+ BIN模式:rb, wb, ab, r+b, w+b, a+b 模式 读指针初始位置 写指针初始位置 模式用途 详细说 ...

  10. CSS 图像左右对齐

    左右对齐图像使用的技术是浮动div元素. float:left 左对齐 float:right右对齐 示例 <!DOCTYPE html> <html>     <hea ...