UGUI按钮事件添加与使用

UGUI是Unity自带的ui组件编辑器,下面就写一下UGUI里面的button组件的事件添加与使用,其它组件的迟点慢慢添加

首先,我们先要创建一个button,这个在Hierachy视图下,直接右键就可以创建了,如图:UGUI按钮事件添加与使用

这样我们就可以看到Game视图里面,有一个很棒的按钮了,那么我们如何使用这个按钮呢?如何给它添加事件,以及如何触发事件呢?

第一种方式,直接写一个公开的事件,在button组件下onclick窗口下把事件“挂”上去:

1.先写一个c#文件:TestButtonClick.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestButtonClick : MonoBehaviour {

    public void clickBtn()
    {
        Debug.Log("点击了按钮");
    }
}

2.把这个脚本挂到一个一个游戏对象上面,这里我直接把它挂在button上面,如图UGUI按钮事件添加与使用

3.在button的inspector的OnClick窗口,点击+号,意思就是要给它添加一个事件了,然后把button拉到inspector的Onclick窗口里面,然后选择我们刚刚写好的事件,如图UGUI按钮事件添加与使用


总结,这种方式的优点:方便,直接写,直接拉,适用于只有点击事件的按钮,缺点:不好管理,而且只有click事件,想做其它效果没发做

第二种方式,直接在代码里面绑定

1.写一个脚本,直接绑定在button上面,如图:UGUI按钮事件添加与使用

TestButtonClick.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TestButtonClick : MonoBehaviour {

    // Use this for initialization
    void Start () {
        Button btn = this.GetComponent<Button>();
        btn.onClick.AddListener(onClickBtn);
    }
    
    // Update is called once per frame
    void Update () {
        
    }

    private void onClickBtn()
    {
        Debug.Log("第二种方式点击了按钮");
    }

}

总结,优点,跟第一种差不多,但是比第一种好管理,缺点,跟第一种一样

第三种方式:通过EventTrigger实现按钮点击

1.写一个脚本,直接绑定在button上面,如图:UGUI按钮事件添加与使用

TestButtonClick.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

[RequireComponent(typeof(UnityEngine.EventSystems.EventTrigger))]
public class TestButtonClick : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {
        Button btn = this.GetComponent<Button>();
        EventTrigger trigger = btn.gameObject.GetComponent<EventTrigger>();
        EventTrigger.Entry entry = new EventTrigger.Entry();

        //鼠标点击
        entry.eventID = EventTriggerType.PointerClick;
        //鼠标进入
        //entry.eventID = EventTriggerType.PointerEnter;
        //鼠标移出
        //entry.eventID = EventTriggerType.PointerExit;
        entry.callback = new EventTrigger.TriggerEvent();
        entry.callback.AddListener(onClick);
        trigger.triggers.Add(entry);
    }

    private void onClick(BaseEventData pointData)
    {
        Debug.Log("第三种方式点击按钮");
    }

    private void onMouseMove(BaseEventData pointData)
    {
        Debug.Log("鼠标经过");
    }
}
总结,优点,几乎button涵盖到的事件,都可以实现,缺点:无