unity+button动态添加事件
首先
EventTriggerListener .cs
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger{
public delegate void VoidDelegate (GameObject go);
public VoidDelegate onClick;
public VoidDelegate onDown;
public VoidDelegate onEnter;
public VoidDelegate onExit;
public VoidDelegate onUp;
public VoidDelegate onSelect;
public VoidDelegate onUpdateSelect;
static public EventTriggerListener Get (GameObject go)
{
EventTriggerListener listener = go.GetComponent<EventTriggerListener>();
if (listener == null) listener = go.AddComponent<EventTriggerListener>();
return listener;
}
public override void OnPointerClick(PointerEventData eventData)
{
if(onClick != null) onClick(gameObject);
}
public override void OnPointerDown (PointerEventData eventData){
if(onDown != null) onDown(gameObject);
}
public override void OnPointerEnter (PointerEventData eventData){
if(onEnter != null) onEnter(gameObject);
}
public override void OnPointerExit (PointerEventData eventData){
if(onExit != null) onExit(gameObject);
}
public override void OnPointerUp (PointerEventData eventData){
if(onUp != null) onUp(gameObject);
}
public override void OnSelect (BaseEventData eventData){
if(onSelect != null) onSelect(gameObject);
}
public override void OnUpdateSelected (BaseEventData eventData){
if(onUpdateSelect != null) onUpdateSelect(gameObject);
}
}
TKDeviceInformationManager.cs
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TKDeviceInformationManager : TKUIManager
{
public Button CheckButton;//校对
// Use this for initialization
void Start()
{
OnBindEvent();
}
public override void OnBindEvent()
{
base.OnBindEvent();
EventTriggerListener.Get(CheckButton.gameObject).onClick = OnCheckButtonClick;
}
private void OnCheckButtonClick(GameObject go)
{
if (go == CheckButton.gameObject)
{
OnCheckButton();
}
}
private void OnCheckButton()
{
Debug.Log("ClickCheckButton");
}
}
TKUIManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TKUIManager : MonoBehaviour {
private GameObject createObject;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
}
public virtual void OnInit()
{
}
public virtual void OnBindEvent()
{
}
public void OnClickOpenFile()
{
OpenDocuments.OpenDocumentsInstance.OnOpenFileButton();
}
public void OnClickOpenURL(string strURL)
{
TKLocalFileOperationSingle.singleton.OnOpenLocalFile(strURL);
}
public GameObject OnCreateButton(string InstantiateName,RectTransform InstantiateParent)
{
GameObject InstantiatePath = Resources.Load<GameObject>(InstantiateName);
return Instantiate(InstantiatePath,InstantiateParent);
}
public GameObject OnCreateObject(Transform TaskParent,string ObjName)
{
createObject = (GameObject)Instantiate(Resources.Load(ObjName));
createObject.GetComponent<RectTransform>().SetParent(TaskParent);
createObject.name = ObjName;
createObject.GetComponent<RectTransform>().anchoredPosition = new Vector2(0, 0);
createObject.transform.localScale = new Vector3(1, 1, 1);
//var taskDegreeX = StartPosization + i * (TaskDegreePrafabWidth + TaskDegreeSpace);
////Debug.LogError("X"+i+" "+taskDegreeX);
//InstantiateTask.transform.localPosition = new Vector3(taskDegreeX, 0, 0);
//Debug.LogError(InstantiateTask.transform.localPosition.x);
createObject.transform.rotation = new Quaternion(0, 0, 0, 0);
//InstantiateTask.GetComponent<Image>().sprite = UnFinishedTaskSprite;
return createObject;
}
public void SetObjectActive(GameObject obj,bool isActive)
{
obj.SetActive(isActive);
}
}

浙公网安备 33010602011771号