Unity自带的相应事件

2023-11-12

代码

using UnityEngine;
using UnityEngine.EventSystems;

public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger
{
    public delegate void VoidDelegate(GameObject go);
    public delegate void VoidDrag(GameObject go, PointerEventData eventData);
    
    //部分相应事件
    public VoidDelegate onClick;
    public VoidDelegate onDown;
    public VoidDelegate onEnter;
    public VoidDelegate onExit;
    public VoidDelegate onUp;
    public VoidDelegate onBeginDrag;
    public VoidDelegate onDrag;
    public VoidDrag onEndDrag;
//外部传输Game,给Game添加此脚本
    static public EventTriggerListener Get(GameObject go)
    {
        EventTriggerListener listener = go.GetComponent<EventTriggerListener>();
        if (listener == null) listener = go.AddComponent<EventTriggerListener>();
        return listener;
    }
    static public EventTriggerListener Get(Transform transform)
    {
        return Get(transform.gameObject);
    }

//添加部分响应事件
    public override void OnPointerClick(PointerEventData eventData)
    {
        if (onClick != null) onClick(gameObject);
    }
    public override void OnPointerDown(PointerEventData eventData)
    {
        if (onDown != null) onDown(gameObject);
    }
    public override void OnPointerEnter(PointerEventData eventData)
    {
        if (onEnter != null) onEnter(gameObject);
    }
    public override void OnPointerExit(PointerEventData eventData)
    {
        if (onExit != null) onExit(gameObject);
    }
    public override void OnPointerUp(PointerEventData eventData)
    {
        if (onUp != null) onUp(gameObject);
    }

    public override void OnBeginDrag(PointerEventData eventData)
    {
        if (onBeginDrag != null) onBeginDrag(gameObject);
    }

    public override void OnDrag(PointerEventData eventData)
    {
        if (onDrag != null) onDrag(gameObject);
    }

    public override void OnEndDrag(PointerEventData eventData)
    {
        if (onEndDrag != null) onEndDrag(gameObject, eventData);
    }

}

条件

满足条件:1、对象必须是 Canvas 的子对象;
   2、对象必须有 Rect 范围;
  3、鼠标的操作不分左键 中键 右键;
   4、如果该对象实现事件接口,而其子对象所附加的 UI 组件含有 Raycast Target 属性且没有实现事件接口,那么只有该对象会触发事件,而其子对象不会触发事件;

各个响应事件

鼠标移入移出

IPointerEnterHandler   接口实现方法
public void OnPointerEnter(PointerEventData eventData)
{
    当鼠标光标移入该对象时触发
}

IPointerExitHandler  接口实现方法
public void OnPointerExit(PointerEventData eventData)
{
    当鼠标光标移出该对象时触发
}

鼠标按下、抬起、点击

IPointerDownHandler  该接口实现方法
public void OnPointerDown(PointerEventData eventData)
{
    鼠标点击A对象,按下鼠标时A对象响应此事件
}

IPointerUpHandler  该接口实现方法
public void OnPointerUp(PointerEventData eventData)
{
    鼠标点击A对象,抬起鼠标时响应
    无论鼠标在何处抬起(即不在A对象中)
    都会在A对象中响应此事件
    注:响应此事件的前提是A对象必须响应过OnPointerDown事件
    Debug.Log("OnPointerUp " + name);
}

IPointerClickHandler  该接口实现方法
public void OnPointerClick(PointerEventData eventData)
{
    鼠标点击A对象,抬起鼠标时A对象响应此事件
    注:按下和抬起时鼠标要处于同一对象上
}

鼠标拖拽

IDragHandler  该接口实现方法
public void OnDrag(PointerEventData eventData)
{
    当鼠标在A对象按下并拖拽时 A对象每帧响应一次此事件
    注:如果不实现此接口,则后面的四个接口方法都不会触发
    Debug.Log("OnDrag " + name);
}

IInitializePotentialDragHandler  该接口实现方法
public void OnInitializePotentialDrag(PointerEventData eventData)
{
    当鼠标在A对象按下还没开始拖拽时 A对象响应此事件
    注:此接口事件与IPointerDownHandler接口事件类似
    Debug.Log("OnInitializePotentialDrag " + name);
}

IBeginDragHandler  该接口实现方法
public void OnBeginDrag(PointerEventData eventData)
{
    当鼠标在A对象按下并开始拖拽时 A对象响应此事件
    此事件在OnInitializePotentialDrag之后响应 OnDrag之前响应
    Debug.Log("OnBeginDrag " + name);
}

IEndDragHandler  该接口实现方法
public void OnEndDrag(PointerEventData eventData)
{
    当鼠标抬起时 A对象响应此事件
    Debug.Log("OnEndDrag " + name);
}

IDropHandler  该接口实现方法
public void OnDrop(PointerEventData eventData)
{
    AB对象必须均实现IDropHandler接口,且A至少实现IDragHandler接口
    当鼠标从A对象上开始拖拽,在B对象上抬起时 B对象响应此事件
    此时name获取到的是B对象的name属性
    eventData.pointerDrag表示发起拖拽的对象(GameObject)
    Debug.Log(eventData.pointerDrag.name + " OnDrop to " + name);
}

选择事件接口

    public void OnSelect(BaseEventData eventData)
    {    选择状态
        Debug.Log("OnSelect");
    }

    public void OnDeselect(BaseEventData eventData)
    {    离开选择状态
        Debug.Log("OnDeselect");
    }

    public void OnUpdateSelected(BaseEventData eventData)
    {     一直处于选择状态
        Debug.Log("OnUpdateSelected");
    }

系统按键事件的接口

这个用到的不是很多,一下Unity系统绑定的按键,比如回车表示确定,Esc表示退出之类的

    public void OnScroll(PointerEventData eventData)
    {   在鼠标滚轮滑动的时候
        Debug.Log("OnScroll");
    }

    public void OnSubmit(BaseEventData eventData)
    {
        在提交的时候
        Debug.Log("OnSubmit");
    }

    public void OnCancel(BaseEventData eventData)
    {
        取消的时候
        Debug.Log("OnCancel");
    }

    public void OnMove(AxisEventData eventData)
    {   在移动的时候
        Debug.Log("OnMove");
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity自带的相应事件 的相关文章

随机推荐

  • mac mini u盘安装系统_2020年mac系统下制作win10引导安装盘,亲测可用

    一 背景 最近组装了一台电脑 需要安装系统 由于家里只有一台Macbook pro 在网上找了很多关于mac环境下制作支持win10启动盘教程 尝试过下面几种方式都失败 即u盘插入后主板不会识别 无法自动安装 1 利用终端指令拷贝iso镜像
  • Linux提权之内核漏洞提权篇

    前言 在渗透过程中 有时利用某些漏洞可以获取一个低权限的用户 然后想办法提权 提升到root用户权限 从而控制整个系统 在获取到低权限shell后 通常会检查操作系统的发行版本 内核版本 老版本的系统可能会存在一些漏洞 于是我们可以利用这些
  • 点云处理,点云处理算法程序

    点云处理 算法程序代编 top5硕博团队 高质量的服务 基于pcl cgal程序代编 联系方式 q 958417691 或闲鱼id专业点云处理 1 点云分割 单木分割 林下地形提取 DEM制作 等高线制作 地形补洞 2 点云重建 多种方法点
  • H5页面调用扫一扫功能

    想要实现H5页面调用微信扫一扫功能 必须先了解微信JS SDK接口 企业号开发接口文档地址 https qydev weixin qq com wiki index php title E9 A6 96 E9 A1 B5 我们来看下使用的大
  • 将任意一个数解析为2的幂的和的方法

    将任意一个数解析为2的幂的和的方法 递归 规律 如给定 14 2 3 lt 14 lt 2 4 14中必有8 2 3 14 8 6 2 2 lt 6 lt 2 3 6中必有4 2 2 6 4 2 2 2 14 2 3 2 2 2 1 Par
  • 第36.1节 动画-刚体动画控制

    目录 本节功能 具体实现 存放动画 寻找动画 播放 暂停 复位 加速 减速 最后用一个事件响应来联接这一切 所有代码 本节功能 本节后几个章节会介绍和动画有关的课程 本节实现一个从3DMAX导出的地板破碎的动画的控制 这类动画叫做刚体动画
  • python对两个list取交集、并集、和异或

    第一种方法 使用python基本数据结构set集合 优点 集合运算长度可以不一致 运算效率高 缺点 两个进行运算的集合中不能够含有重复的元素 如果含有的话 转成set集合后 会自动去掉重复元素 a 1 2 3 b 1 2 6 9 12
  • MyBatis-Plus&Druid数据源理解

    SpringBoot集成MyBatis Plus 1 1MyBatis Plus简介 MyBatis Plus 简称 MP 是一个 MyBatis 的增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提高效率而生 1 12
  • Unity(Input.GetAxis和Input.GetAxisRaw)

    Input GetAxis 描述 数值返回是慢慢向上加的 1 gt 0 3 gt 1 类似于车慢慢加速的过程 Input GetAxisRaw 描述 数值返回是固定的是 1 gt 0 gt 1
  • undo表空间出现问题的几种情况与处理

    undo空间出现问题的处理 一 数据库正常关闭immediate或normal 创建pfile并使用pfile启动数据库 startup nomount create pfile from spfile shutdown abort sta
  • 【python】实现list除以一个数

    文章目录 新建一个list 存放数据 使用numpy np divide list如何除以一个数 有如下两种方法 import random my list random randint 0 100 for x in range 10 pr
  • mysql 页和叶子页_一看就懂的:MySQL数据页以及页分裂机制,别在说不会了

    下面我们就一起看下 究竟什么是MySQL的数据页 数据区等概念 二 数据页长啥样 数据页长下面这样 image png 三 什么是数据区 在MySQL的设定中 同一个表空间内的一组连续的数据页为一个extent 区 默认区的大小为1MB 页
  • MySQL Flashback拯救手抖党

    MySQL Flashback拯救手抖党 2019 06 12 黄子程 黄子程 黄子程 网易游戏资深运维工程师 曾参与多款网易代理游戏产品的运营维护工作 后逐渐转向数据库管理维护领域 目前主要工作方向为网易游戏 Relational DBa
  • unity3d 对大图额外加载

    加载 UI 背景大图 lua 使用 if self findBack image nil then resMgr UnLoadBigImage self findBack image self findBack image nil self
  • 【华为云】E: You don‘t have enough free space in /var/cache/apt/archives/.

    目录 一 购买华为云系统盘空间 二 扩容前的准备 三 扩容 扩大已有MBR分区 起因 使用华为云服务器 在安装Xfce桌面环境时报错 E You don t have enough free space in var cache apt a
  • sql 数据库删除,修改,增加列语句

    ALTER TABLE 添加 修改 删除表的列 约束等表的定义 查看列 desc 表名 修改表名 alter table t book rename to bbb 添加列 alter table 表名 add column 列名 varch
  • [翻译&摘抄]ES6 中的元编程:Symbol

    原文地址 Metaprogramming in ES6 Symbols and why they re awesome 原文作者 Keith Cirkel 译文出自 掘金翻译计划 转自 https juejin im post 5a0e65
  • LM5118 DC-DC电源降压芯片带载能力不够问题

    1 现象 主机系统带载到2A时 系统反复重启 2 分析 示波器测量VCC 5V 稳压源一显示到2A VCC 5V就会掉到0V 把如下二极管断开 万用表测量电流到3 7A就是掉下 3 解决 查规格书可知电流检测电阻的计算 原来为0 03R 按
  • javascript解析XML生成树形结构

    前两天一个朋友去一家公司面试 面试题是用javascript解析一个XML 生成树形结构 今天闲着没事就试了试 源代码
  • Unity自带的相应事件

    Unity自带的相应事件 代码 条件 各个响应事件 鼠标移入移出 鼠标按下 抬起 点击 鼠标拖拽 选择事件接口 系统按键事件的接口 代码 using UnityEngine using UnityEngine EventSystems pu