說明:
UGUI一般對Button等添加點擊事件等時,往往會涉及到使用將指令碼與Button相掛接的方式,今天介紹幾種不需要掛接的方式,直接由代碼與之產生相對應的效果。。。 方法一: 使用GetComponent<Button>().onClick.AddListener方法添加事件監聽器:
public GameObject btnTest1; void Start() { btnTest1.GetComponent<Button>().onClick.AddListener(delegate () { Debug.Log("Click1111"); }); }
常見類型:
GetComponent<Button>().onClick.AddListener(delegate () { OnClickEvent(itemImg[i]._Obj); }); } } void OnClickEvent(GameObject Obj) { }
方法二: 和方法一是同一種方法(對不太懂事件委託的大兄弟們隨便瞭解一下),只是將所監聽的事件由外部函數傳遞而來:
public GameObject btnTest2; public GameObject btnTest3; void Start() { btnTest2.GetComponent<Button>().onClick.AddListener(btnClick2); } void btnClick2() { Debug.Log("Click2222"); }
方法三: 自訂了一個類繼承EventTrigger,並重寫其中的部分所需要的方法(目的延伸UGUI中各種事件):
UGUI所提供的EventTrigger如下所示:
重寫的好處在於,可以實現UGUI提供的Onclick事件之外的事件如:OnPointDown(按下事件)、OnPointExit(抬起事件)等一系列,可根據自己需求萃取。 如下面所示:
using UnityEngine;using System.Collections;using UnityEngine.EventSystems;public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger{ public delegate void VoidDelegate(); public VoidDelegate onClick; static public EventTriggerListener Get(Transform transform) { EventTriggerListener listener = transform.GetComponent<EventTriggerListener>(); if (listener == null) listener = transform.gameObject.AddComponent<EventTriggerListener>(); return listener; } public override void OnPointerClick(PointerEventData eventData) { if (onClick != null) onClick(); }}
測試點擊事件如下:
public GameObject btnTest3; void Start() { EventTriggerListener.Get(btnTest3.transform).onClick += btnClick3; } void btnClick3() { Debug.Log("Click3333"); } 整體測試如下: