unity中按鈕點擊的委托事件寫法


最近做一個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方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM