事件注册
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拖拽
- 创建一个UI-Image,并对UI-Image添加一个EventDemo脚本
- 编写脚本代码
先引入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