首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[学习笔记]UGUI-Event事件

[学习笔记]UGUI-Event事件

作者头像
六月丶
发布2022-12-26 17:49:10
发布2022-12-26 17:49:10
8220
举报
文章被收录于专栏:六月-游戏开发六月-游戏开发

事件注册

1. 通过编辑器绑定

编写触发事件后要执行的方法(方法名和内容随意)

在可触发事件的UI(例如Button)的组件面板中添加事件 ![编辑器添加事件.png][1]

2. 通过AddListener方法

代码语言:javascript
复制
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接口,代码如下。

代码语言:javascript
复制
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; }

}

代码语言:javascript
复制
###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 年 01 月,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 事件注册
    • 1. 通过编辑器绑定
    • 2. 通过AddListener方法
    • 3. 实现接口
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档