编写触发事件后要执行的方法(方法名和内容随意)
在可触发事件的UI(例如Button)的组件面板中添加事件 ![编辑器添加事件.png][1]
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);}样例:实现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