事件注册

1. 通过编辑器绑定

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

    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键执行一次

  [1]: https://hctra.cn/usr/uploads/2020/01/3541530969.png
最后修改:2020 年 02 月 01 日
如果觉得我的文章对你有用,请随意赞赏