Unity Button事件的简洁处理

看到很多人依然还是通过最原始的方法给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 Start()
    {
//获取子集下所有Button的集合
        BtnArr = transform.GetComponentsInChildren<Button>(true);

//将所有Button的点击事件绑定到HandlerNotification方法上
        for (int i = 0; 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都被过滤掉不处理。

原文地址:https://www.cnblogs.com/easywhite/p/10347943.html

时间: 02-02

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

Unity学习笔记 之 触发Unity UI 的 Button 事件 的代码记录

首先奉献上 Button 所触发的事件 的脚本代码. 文件名为testButtonEvent using UnityEngine; using System.Collections; //1.引入 UI . using UnityEngine.UI; public class testButtonEvent : MonoBehaviour { //2.定义一个目标对象. public Text targetTextObject; // Use this for initialization vo

得到的一些对java中的Button事件的理解

先创建一个窗口,再创建一个按钮名字可以写在{Button btn = new Button("按钮的名字");}中.之后你就可以添加一个按钮监听器,你可以在监听器中写下你想要再按下这个按钮之后所发生的事情.具体如下: btn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub //

iOS 给Main.storyboard 添加button 事件《转》

XCODE中使用Main.Storyboard拉入控件并实现事件(Swift语言) 如何在XCODE中的Main.Storyboard内拉入控件并实现一个简单的效果呢?本人由于刚接触Swift语言不久,对于IDE的操作还是很生疏,不懂了就在网上参考了网上前辈们的文章.以下我将演示如何用Swift语言配合Main.Storyboard演示一个小例子,对于新建一个SingleView Application在这里就不多说了. 创建好的应用程序已经自动创建好了一个和Main.Storyboard连接好

按键——Button事件监听器

button_1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String button_1_content=button_1 .getText().toString(); //获得按键的内容,读取的数据来自android:text editText=(EditText)findViewById(R.id.editText); textContent=editTex

Unity iGUI 插件学习

在这里,简单给大家介绍一个功能强大的unity的UI插件-iGUI 相信不少的童鞋听说过这个插件,但是由于该插件在unity 的Asset Store上是需要money的,所以这就避免不了让一些好学的同学拿不到这个功能强大又好用的UI插件,今天在这里不仅简单的向大家说明iGUI的使用方法,而且还会提供该插件的下载地址: http://download.csdn.net/detail/u014076894/8644081 首先我们打开上面的网址进行下载,拿到这个插件(. unitypackage)

Unity 进度条3D制作(3D版)

昨天我们一起学习了2D进度跳的制作,那么趁着我们脑海中还残存昨日的记忆,今天继续学习另一种方法: 实现思路:当鼠标悬浮Start按钮->实例化物体并显示进度->100/100->进入游戏场景:   鼠标离开按钮进度还原为 0/100    直接点击Start按钮也可完成. 1,首先我们导入NGUI资源包,在当前工程的场景下创建UI. 2,在Herarchy下添加平行光,在Panel下添Button. 此处Background没有选择背景图片,即背景色为默认值,此处label设置字体显示S

Sharepoint2013 列表的NewForm 页面加入一个 保存新建 button

昨天一同事问我怎样在sharepoint2013的NewForm.aspx页面上加入一个 save and new的button.实现save 和new的功能.save的功能和默认的save按钮效果一至. 效果如图: 这里的思路例如以下: 1)用juqery来动态加入一个saveandnew的button 2)新建button的click事件将要调用默认save button的click方法 3)新button的click事件后页面跳转主要取决于url的Source參数.所以我们必须改写获取该參

用block做事件回调来简化代码,提高开发效率

我们在自定义view的时候,通常要考虑view的封装复用,所以如何把view的事件回调给Controller就是个需要好好考虑的问题, 一般来说,可选的方式主要有target-action和delegate,以及这次要强烈推荐的block. target-action和delegate方式有个很不方便的地方,就是配置代码和action代码不在同一个地方,你肯定要多写一个selector方法或者delegate方法,这就带来一个问题,一旦代码比较长或者selector方法比较多,找起来就很不方便.

JS—事件对象

事件对象: 在触发DOM事件的时候都会产生一个对象 事件对象Event: 1)type:获取事件类型 2)target:获取事件目标 3)stopPropagation():阻止事件冒泡 4)preventDefault():阻止事件默认行为 <div id="div"> <button id="btn">按钮</button> <a href="www.baidu.com" id="aid&q

Android开发学习笔记:圆角的Button

标签:Android Button 休闲 圆角 移动开发 在res目录下的drawable-mdpi建立xml文件shape.xml,如下图所示: shape.xml <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectang