实现UGUI事件监听的三种方式_(拖拽、代码、接口)

1、拖拽

  • 最简单的方式 ,在UI组件**On Click()**拖拽游戏物体~选择方法
  • 另一种方式添加Event Trigger组件,选择UI事件,拖拽游戏物体,选择方法

2、代码添加

首先脚本挂在空物体上,代码如下:

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

public class UIEvent : MonoBehaviour
{
    public GameObject btnGo;
    public GameObject sliderGo;
    public GameObject dropDownGo;
    
    // Start is called before the first frame update
    void Start()
    {
        btnGo.GetComponent<Button>().onClick.AddListener(this.ButtonOnClick);

        btnGo.GetComponent<Slider>().onValueChanged.AddListener(this.SliderOnClick);

        btnGo.GetComponent<Dropdown>().onValueChanged.AddListener(this.DropDownOnClick);
    }

    void ButtonOnClick()
    {
        Debug.Log("ButtonOnClick");
    }
    void SliderOnClick(float value)
    {
        Debug.Log("SliderOnClick");
    }
    void DropDownOnClick(Int32 value)
    {
        Debug.Log("DropDownOnClick");
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

然后指定一个Button,点击按钮就会执行代码中方法

3、通过实现接口

这些接口可以通过API~Scripting-Event System-Supported Events来进行查找_仅限于UGUI
有些接口是依赖于其他接口存在的,如果不执行事件函数,可能是没有实现其依赖的接口,如:要想执行IDragHandler接口的事件函数,必须实现IDragHandler接口

1、//进入该区域时调用
IPointerEnterHandler
2、//离开该区域是调用
IPointerExitHandler
3、//按下时调用
IPointerDownHandler
4、//抬起时调用
IPointerUpHandler
5、//按下并抬起时调用,例如按钮的点击
IPointerClickHandler
6、//拖动开始时调用,并且可以取到拖动的方向
IBeginDragHandler
7、//当发生拖动时调用拖动对象
IDragHandler
8、//在拖动完成时调用拖动对象
IEndDragHandler
9、//在拖动完成的对象上调用
IDropHandler
10、//当鼠标滚轮滚动时调用
IScrollHandler
11、//当对象成为选定对象时调用,只针对Selectable起作用
ISelectHandler
12、//取消选择,由于只能选择一个Selectable,当选择新的后,之前的选择就会回调取消选择事件
IDeselectHandler
13、//选择后,可监听上下左右、WSAD方向键。如果访问eventData.moveDir,可以取到具体移动的方向
IMoveHandler
14、//当按下提交按钮时调用
ISubmitHandler
15、//当按下取消按钮时调用
ICancelHandler
16、//在找到拖动目标时调用,可用于初始化值(拖动初始化,只表示滑动初始化,无法取到方向)
IInitializePotentialDragHandler
17、//选择时连续调用,只针对Selectable起作用
IUpdateSelectedHandler

以下是示例:

对于Image来说是没办法通过前两种方式对事件进行监听的,那么这时候就只有通过接口来实现
先创建一个Image,再添加一个脚本组件

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

public class UIEventManager : MonoBehaviour, IPointerDownHandler
{
    //实现的接口     鼠标点击Image会触发
    //要确保Image组件里的Raycast Target被勾选
    //因为这种方法是通过射线检测来实现的

    public void OnPointerDown(PointerEventData eventData)
    {
        Debug.Log("IPointerDownHandler");
    }
}
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
/*
 * UI必须有继承自Selectable组件的组件
 */
public class ImageII : MonoBehaviour,ISelectHandler,IDeselectHandler,IUpdateSelectedHandler
{
    public void OnSelect(BaseEventData eventData)
    {
        print("UI被选中了");
    }
    public void OnDeselect(BaseEventData eventData)
    {
        print("UI被结束选中");
    }

    public void OnUpdateSelected(BaseEventData eventData)
    {
        print("选中之后被结束选中之前一直被调用");
    }
}

附加:UI事件管理

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值