[学习笔记]UGUI-Event事件

事件注册

1. 通过编辑器绑定

  • 编写触发事件后要执行的方法(方法名和内容随意)
  • 在可触发事件的UI(例如Button)的组件面板中添加事件
    编辑器添加事件.png

2. 通过AddListener方法

Button BTNormalGame = this.transform.Find("NormalGame").GetComponent<Button>();
//添加无参方法
BTNormalGame.onClick.AddListener(Onclick);
//添加带参方法
BTNormalGame.onClick.AddListener(delegate { OnClick(1); });
public void Onclick() { print("执行无参方法"); }
public void OnClick(int idx){print("执行有参方法"+idx);}

3. 实现接口

样例:实现UI拖拽

  1. 创建一个UI-Image,并对UI-Image添加一个EventDemo脚本
  2. 编写脚本代码
    先引入UnityEngine.EventSystems命名空间,然后让该脚本实现IDraghandler和IPointerDownHandler接口,代码如下。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class EventDemo : MonoBehaviour,IDragHandler,IPointerDownHandler
{
    private Vector3 beginMove;
    //当鼠标在UI上点击时调用一次
    public void OnPointerDown(PointerEventData eventData)
    {
        Vector3 PressWorldSpace;
        RectTransformUtility.ScreenPointToWorldPointInRectangle(transform.parent as RectTransform, eventData.position, eventData.pressEventCamera, out PressWorldSpace);
        beginMove = this.transform.position - PressWorldSpace;
    }
    //当鼠标拖拽UI时每帧调用
    public void OnDrag(PointerEventData eventData)
    {
        Vector3 worldSpace;
        //参数:(父物体的变换组件,屏幕坐标,摄像机,out 接收世界坐标的变量)
        RectTransformUtility.ScreenPointToWorldPointInRectangle(transform.parent as RectTransform, eventData.position, eventData.pressEventCamera, out worldSpace);
        this.transform.position = worldSpace + beginMove;
    }

}

4. 自定义框架

事件接口

命名域

UnityEngine.EventSystems

鼠标指针类

在完成后的第一帧执行一次

  • IPointerEnterHandler 鼠标进入
  • IpointerExitHandler 鼠标离开
  • IPointerDownHandler 鼠标按下
  • IPointerUpHandler 鼠标抬起
  • IPointerClickHandler 鼠标完成一次点击(按下抬起)

拖拽类

  • IBeginDragHandler 拖拽的第一帧执行一次
  • IDragHandler 拖拽的每一帧都执行
  • IEndDragHandler 拖拽结束的那一帧执行一次(注意需要先实现IdragHandler)
  • IDropHandler 拖拽抬起时执行(和上面基本一致,但比上面那个后执行)

点选类

  • IUpdateSelectedHandler 被点选后每帧执行
  • ISelectHandler 被点选的第一帧执行一次
  • IdeselectHandler 不被点选后的第一帧执行一次

输入类

建立在点选基础之上的事件

  • IScrollHandler 滑动鼠标滚轮
  • IMoveHandler 按住方向键或WSAD的每帧执行
  • ISubmitHandler 按下回车键执行一次
  • ICancelHandler 按下ESC键执行一次
本文作者:六月丶

本文链接:https://hctra.cn/index.php/archives/557/

版权声明:如无特别声明,本文即为六月'blog原创,仅代表个人观点,如要转载请务必注明文章出处。
最后修改:2020 年 02 月 01 日 01 : 48 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论