unity UI事件
由于工作需要到持續按鍵,所以了解了一下unity UI事件,本文主要轉載于http://www.cnblogs.com/zou90512/p/3995932.html?utm_source=tuicool&utm_medium=referral,并對相關問題進行解釋。
我們最常用到的就是unity的button組件,其實button組件所響應的事件為unity眾多ui事件中的PointerClick事件,unity的ui事件如下圖所示:
實現響應事件有以下三種:
(一)在相關UI控件上掛腳本,腳本繼承相關事件對應的接口,并在接口函數中完成相應方法的實現即可。
(二)在相關控件上添加EventTrigger組件,點擊AddNewEnvetType添加事件類型,即對應的UI事件,然后就可以掛載響應的方法。
(三)便是在程序實現。第一步也需要在相關控件上添加EventTrigger組件,然后添加監聽。代碼如下
void Start(){var trigger = transform.gameObject.GetComponent<EventTrigger>();if (trigger == null)trigger = transform.gameObject.AddComponent<EventTrigger>();// 實例化delegatestrigger.triggers = new List<EventTrigger.Entry>();// 定義需要綁定的事件類型。并設置回調函數EventTrigger.Entry entry = new EventTrigger.Entry();// 設置 事件類型entry.eventID = EventTriggerType.PointerClick;// 設置回調函數entry.callback = new EventTrigger.TriggerEvent();UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(OnScriptControll);entry.callback.AddListener(callback);// 添加事件觸發記錄到GameObject的事件觸發組件 trigger.triggers.Add(entry);}在此理解一下此段代碼:我們要添加一個我們想要的事件,就需要對EventTrigger添加內容,添加的內容有兩個,一個為事件類型,一個為對應事件實現的函數,或者說方法。
EventTrigger通過Entry類打包了這兩個內容,eventID綁定事假類型,callback綁定事件對應的方法。通過unityaction定義相關委托以及綁定的方法,通過添加監聽AddListener來實現。
?
由于在眾多圖片或者text上實現點擊事件是則需要每一個都添加點擊事件,比較麻煩,借鑒別人的EventListener來
using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events;public class UGUIEventListener : EventTrigger {public UnityAction<GameObject> onClick;//可以重載EventTrigger的其他虛方法來實現點擊拖動等事件public override void OnPointerClick(PointerEventData eventData){base.OnPointerClick(eventData);if(onClick != null){onClick(gameObject);}}public static UGUIEventListener Get(GameObject go){UGUIEventListener listener = go.GetComponent<UGUIEventListener>();if (!listener)listener = go.AddComponent<UGUIEventListener>();return listener;} }給text和image添加事件
using UnityEngine; using UnityEngine.UI;public class UGUIButtonClick : MonoBehaviour {public Text textTitle;public Image imageTitle;private void Awake(){UGUIEventListener.Get(textTitle.gameObject).onClick = OnClick;UGUIEventListener.Get(imageTitle.gameObject).onClick = OnClick;}void OnClick(GameObject go){if(go == textTitle.gameObject){Debug.Log("Text clicked");}else if(go == imageTitle.gameObject){Debug.Log("Image clicked");}} }?
?
PS:三維物體實現上述點擊事件需要在Main Camera上掛載physics raycaster組件,然后在三維物體上掛載EventTrigger就可以實現相關方法方法
?
轉載于:https://www.cnblogs.com/llstart-new0201/p/7102868.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的unity UI事件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 表格下载
- 下一篇: ViewStub基本用法,include