Unity3D之UI按键绑定事件(六)

来源:互联网 发布:excel中vba编程 编辑:程序博客网 时间:2024/06/06 15:02

六、通过unity系统自带接口和观察者模式绑定按键事件

 UI(UGUI)如何判断UI元素被点击时是鼠标哪个按键,(五)中我们可以根据eventData.pointerId来监听是我们按下的是鼠标左键还是右键。

通过前面几部分学习我们已经实现对UI系统如何绑定事件做了大概讲解,但是弊端明显,就是每个UI元素都创建一个MonoBehavior来进行监听各个事件,显然这样做不行,下面我们来学习下利用Delegate和Event来做一个通用类UIEventListener来处理事件(不了解Delegate和Event的童鞋请自行谷歌搜索观察者模式;

第一步上代码;

publicclassUIEventListener : MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler
{
 
/// <summary>
/// 定义事件代理
/// </summary>
/// <param name="gb"></param>
publicdelegatevoid UIEventProxy(GameObject gb);
 
/// <summary>
/// 鼠标点击事件
/// </summary>
publiceventUIEventProxy OnClick;
 
/// <summary>
/// 鼠标进入事件
/// </summary>
publiceventUIEventProxy OnMouseEnter;
 
/// <summary>
/// 鼠标滑出事件
/// </summary>
publiceventUIEventProxy OnMouseExit;
 
publicvoidOnPointerClick(PointerEventData eventData)
{
if(OnClick != null)
OnClick(this.gameObject);
}
 
publicvoidOnPointerEnter(PointerEventData eventData)
{
if(OnMouseEnter != null)
OnMouseEnter(this.gameObject);
}
 
publicvoidOnPointerExit(PointerEventData eventData)
{
if(OnMouseExit != null)
OnMouseExit(this.gameObject);
}
}

第二步:通过Hierarchy面板创建button

第三步:创建一个名为EventHandler的脚本,代码如下

public class EventHandler: MonoBehaviour {
void Start () {
        Button btn = this.GetComponent<Button>();
        UIEventListener btnListener = btn.gameObject.AddComponent<UIEventListener>();
        btnListener.OnClick += delegate (GameObject gb)
        {
            Debug.Log(gb.name + "OnClick");
        };
        btnListener.OnMouseEnter += delegate (GameObject gb)
        {
            Debug.Log(gb.name + "OnMouseEnter");
        };
        btnListener.OnMouseExit += delegate (GameObject gb)
        {
            Debug.Log(gb.name+ "OnMouseExit");
        };
}//Start ()_end

}

第四步,绑定EventHandler脚本到Button上

然后运行点击按钮就能看到运行的结果了。

七、常用案例


原创粉丝点击