博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
unity中按钮点击的委托事件写法
阅读量:5156 次
发布时间:2019-06-13

本文共 1578 字,大约阅读时间需要 5 分钟。

最近做一个UI面板,里面需要好几个按钮,有按钮就要添加点击事件,按我之前都是哪个按钮需要添加事件,就在这个按钮下面挂个脚本,里面写上button点击之后所出发的方法,然后直接挂载在button下面,如下图所示:

这样就可以了;但是这样做的扩展性很差,会比较凌乱,尤其是多人合作的时候,你可能让别人在需要这个按钮的点击事件的时候再去看你写的代码,并在里面进行操作,一个很好的解决方法就是C#中委托事件机制,可以直接在外部进行注册事件,这样,你只需要把事件定义好,等到别人想要用这个点击事件的时候,他也只需要重新注册一下你的事件,换成他的方法就行了,具体的操作是:

1、在你的按钮上添加一个脚本:

 

using UnityEngine;

using System.Collections;
using UnityEngine.UI;
public class ButtonEvents : MonoBehaviour
{

  public delegate void ButtonDelegate();

  public event ButtonDelegate ClickButton;

  void Start()

  {
    GameObject btObj = GameObject.Find(name);
    Button bt1 = btObj.GetComponent<Button>();
    bt1.onClick.AddListener(delegate () { this.ButtonClick(btObj); });
  }

  public void ButtonClick(GameObject go)

  {
    if (ClickButton != null)

      ClickButton();

  }
}

这样在按钮上面就不用再去拖脚本了,Start方法里面已经进行了点击事件的监听,只要点击了按钮就会监听到ClickButton事件;

2、接下来要做的只是在需要使用这个事件的时候进行注册就行了

using UnityEngine;

using System.Collections;
using System;

public class RegisterEvent : MonoBehaviour

{

  void Start()
  {
    //事件的注册
    GameObject.Find("Button1").GetComponent<ButtonEvents>().ClickButton += Print1;
    GameObject.Find("Button2").GetComponent<ButtonEvents>().ClickButton += Print2;
    GameObject.Find("Button3").GetComponent<ButtonEvents>().ClickButton += Print3;

  }

  void Print1()

  {
    Debug.Log("111");
  }
    void Print2()
  {
    Debug.Log("222");
  }
    void Print3()
  {
    Debug.Log("333");
  }
}

这个脚本可以挂在任何物体上,它的之行结果是,当鼠标点击到命名为Button1 的按钮时就调用Print1方法,控制台就会输出111;同理,当鼠标点击到Button2和Button3的时候分别会调用Print2和Print3方法

转载于:https://www.cnblogs.com/cxy-610312340/p/5220593.html

你可能感兴趣的文章
Spring Mvc模式下Jquery Ajax 与后台交互操作
查看>>
(转)matlab练习程序(HOG方向梯度直方图)
查看>>
『Raid 平面最近点对』
查看>>
【ADO.NET基础-数据加密】第一篇(加密解密篇)
查看>>
C语言基础小结(一)
查看>>
STL中的优先级队列priority_queue
查看>>
UE4 使用UGM制作血条
查看>>
浏览器对属性兼容性支持力度查询网址
查看>>
OO学习总结与体会
查看>>
虚拟机长时间不关造成的问题
查看>>
校门外的树2 contest 树状数组练习 T4
查看>>
面试整理:Python基础
查看>>
Python核心编程——多线程threading和队列
查看>>
Program exited with code **** 相关解释
查看>>
植物大战僵尸中文年度版
查看>>
26、linux 几个C函数,nanosleep,lstat,unlink
查看>>
投标项目的脚本练习2
查看>>
201521123107 《Java程序设计》第9周学习总结
查看>>
Caroline--chochukmo
查看>>
iOS之文本属性Attributes的使用
查看>>