UGUI获取Button的按下,抬起,离开等事件

1. 通过直接绑定脚本来绑定事件

1 : 建一个ButtonTest脚本,挂在一个游戏对象上(里面的方法public或private都可以).

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ButtonTest : MonoBehaviour {
    
    private GameObject Obj;
    private void Start()
    {
        Obj = GameObject.Find("Button");
        Obj.GetComponent<Button>().onClick.AddListener(Func1);
        Obj.GetComponent<Button>().onClick.AddListener(Func2);
    }
    void Func1()
    {
        print("执行了Func1方法!");
    }
    public void Func2()
    {
        print("执行了Func2方法!");
    }
}

2 : 运行,点击按钮执行两个方法.

Obj.GetComponent<Button>().onClick.AddListener(Func1);可以换成
Obj.GetComponent<Button>().onClick.AddListener
     (
          delegate () {Func1(); }
     );

3. 通过 EventTrigger 实现按钮点击事件(一) 

1 : 创建一个ButtonClickTest 脚本, 利用 UnityEngine.EventSystems.EventTrigger 添加监听事件.

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


// 此请求为自动添加 EventTrigger 脚本
[RequireComponent(typeof(UnityEngine.EventSystems.EventTrigger))]
public class ButtonTest : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {
        Button  _button = this.GetComponent<Button>();
        EventTrigger  _trigger = _button.gameObject.GetComponent<EventTrigger>();
        EventTrigger.Entry en1 = new EventTrigger.Entry();
        EventTrigger.Entry en2 = new EventTrigger.Entry();
        EventTrigger.Entry en3 = new EventTrigger.Entry();

        EventTrigger.Entry en4 = new EventTrigger.Entry();

        EventTrigger.Entry en5 = new EventTrigger.Entry();



        // 鼠标点击事件
        en1.eventID = EventTriggerType.PointerClick;
        // 鼠标进入事件 
        en2.eventID = EventTriggerType.PointerEnter;
        // 鼠标滑出事件 
        en3.eventID = EventTriggerType.PointerExit;

        en4.eventID = EventTriggerType.PointerDown;

        en5.eventID = EventTriggerType.PointerUp;



        en1.callback = new EventTrigger.TriggerEvent();
        en1.callback.AddListener(Func1);
        _trigger.triggers.Add(en1);


        en2.callback = new EventTrigger.TriggerEvent();
        en2.callback.AddListener(Func2);
        _trigger.triggers.Add(en2);


        en3.callback = new EventTrigger.TriggerEvent();
        en3.callback.AddListener(Func3);
        _trigger.triggers.Add(en3);

        

         en4.callback = new EventTrigger.TriggerEvent();
        en4.callback.AddListener(Func4);
        _trigger.triggers.Add(en4);



         en5.callback = new EventTrigger.TriggerEvent();
        en5.callback.AddListener(Func5);
        _trigger.triggers.Add(en5);




    }
    private void Func1(BaseEventData pointData)
    {
        Debug.Log("鼠标点击了!");
    }
    private void Func2(BaseEventData pointData)
    {
        Debug.Log("鼠标进入了!");
    }
    private void Func3(BaseEventData pointData)
    {
        Debug.Log("鼠标滑出了!");
    }

    private void Func4(BaseEventData pointData)
    {
        Debug.Log("按下");
    }

    private void Func5(BaseEventData pointData)
    {
        Debug.Log("抬起");
    }


}


2 :把脚本挂在Button对象上,然后Unity会给Button游戏对象再挂一个EventTrigger脚本.

 3 :运行.


4. 通过 EventTrigger 实现按钮点击事件(二)

 1 :写一个脚本挂在一个游戏对象,例如相机上(和按钮关联的事件方法要声明为public).

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


public class ButtonTest : MonoBehaviour
{
    // Use this for initialization
    void Start()
    {
    }
    public void Func1()
    {
        Debug.Log("鼠标点击了!");
    }
    public void Func2()
    {
        Debug.Log("鼠标进入了!");
    }
    public void Func3()
    {
        Debug.Log("鼠标滑出了!");
    }
    public void Func4()
    {
        Debug.Log("鼠标按下了!");
    }
    public void Func5()
    {
        Debug.Log("鼠标抬起了!");
    }
}

2 :给Button游戏对象添加EventTrigger组件.

 3 :在组件里添加对应的事件,选择对应的方法.


4 :运行,鼠标在按钮上运动,点击


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值