Unity使用委托完成點擊事件注冊
- 一、需要創建2個腳本
- 二、具體步驟
- 1.ClickListener
- 1.1
- 1.2
- 2.UIManager
- 2.1給需要注冊監聽的物體宣告并系結方法
- 總結
- 補充:如果需要3D物體也有按鈕點擊回應,可以直接在ClickListener.cs中添加函式OnMouseClick();因為OnPointerClick()只對UI有回應,OnMouseClick()只對3D物體回應;故兩者放在ClickListener.cs中不會沖突
一、需要創建2個腳本
1.ClickListener .cs
2.UIManager.cs
二、具體步驟
1.ClickListener
首先要確定ClickListener中需要干什么!
1.1
我們需要定義一個委托,這個委托ClickCallBack有兩個引數,一個Transform型別,一個object型別,再定義兩個私有的全域變數ClickCallBack mCallBack、object mParm
// An highlighted block
public delegate void ClickCallBack(Transform t, object parm);
private ClickCallBack mCallBack;
private object mParm;
1.2
定義三個方法:
- AddCallBack(Transform trans,ClickCallBack callBack,object parm) //外部進行回呼田添加用的
- SetCallBack(ClickCallBack callBack,object parm)//內部進行設定
- OnPointerClick(PointerEventData eventData)//點擊觸發事件
注意:第三個OnPointerClick是從介面IPointerClickHandle中實作的
using UnityEngine;
using UnityEngine.EventSystems;
public class ClickListener : MonoBehaviour,IPointerClickHandler
{
public delegate void ClickCallBack(Transform t, object parm);
private ClickCallBack mCallBack;
private object mPram;
public static void AddCallBack(Transform trans,ClickCallBack callBack,object pram)
{
//TODO 參考SetCallBack進行方法的系結
ClickListener cl= trans.GetComponent<ClickCallBack>();
if(cl==null)
{
Debug.Log("----------GetComponentFailed----------");
}
SetCallBack(callBack,pram);
}
public void SetCallBack(ClickCallCack callBack,object pram)
{
//通過UIManager中呼叫AddCallBack來進行委托的系結
mCallBack=callBack;
mPram=pram;
}
public void OnPointerClick(PointerEventData eventData)
{
//觸發事件
Debug.Log("------ClickTrigger------");
mCallBack(transform,pram);
}
}
2.UIManager
2.1給需要注冊監聽的物體宣告并系結方法
宣告一個需要進行監聽系結的變數 Transform btn1;還有一個處理邏輯(觸發)的方法
using UnityEngine;
public class UIManager : MonoBehaviour
{
public Transform btn1;
private void Awake()
{
ClickListener.AddCallBack(btn1, OnBtn1Click, null);
}
// 這里的引數必須和定義的委托保持一致
public void OnBtn1Click(Transform trans,object pram)
{
Debug.Log("---------btn1Click----------");
}
}
總結
這個點擊方法,適用于所有的UI元素,只需要通過給UI元素添加ClickListener組件,并且在管理器中添加監聽和注冊方法即可!
補充:如果需要3D物體也有按鈕點擊回應,可以直接在ClickListener.cs中添加函式OnMouseClick();因為OnPointerClick()只對UI有回應,OnMouseClick()只對3D物體回應;故兩者放在ClickListener.cs中不會沖突
private void OnMouseClick()
{
Debug.Log("------OnMouseClick--------");
mCallBack(transform, mPram);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263357.html
標籤:其他
上一篇:AcWing 148. 合并果子 第一次涉及哈夫曼數
下一篇:C語言走迷宮小游戲
