DeepSeek教unity------UI元素长按响应

news2025/3/1 20:32:24

 

主要功能说明:

  1. 长按检测:通过记录指针按下的时间,判断是否达到 longClickTime,从而触发长按事件。
  2. 状态管理:使用 StateEnum 枚举管理点击项的当前状态(未按下、按下等待长按、长按已触发)。
  3. 事件回调:通过实现 IPointerDownHandlerIPointerUpHandler 和 ICancelHandler 接口,处理 Unity UI 的指针事件。
  4. 监听器事件:用于定义长按事件的监听器,外部类可以注册事件以处理长按逻辑。

使用场景:

  • 适用于需要检测长按操作的 UI 元素,例如长按删除、长按编辑等交互场景。
/****************************************************
    文件:LongClickable.cs
	作者:Edision
    日期:#CreateTime#
	功能:长按
*****************************************************/
using UnityEngine;
using UnityEngine.UI;
using System;
using UnityEngine.EventSystems;


/// <summary>
/// 用于将“长按点击”事件委托给事件监听器
/// 需要一个可点击的图形组件(可以是透明度为零的图像)以接收 OnPointerDown、OnPointerUp 等事件。
/// 其他 UI 元素不应覆盖此组件,以确保能够接收指针回调。
/// </summary>
[RequireComponent(typeof(Graphic))]
public class LongClickable : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    public float longClickTime = .7f; // 用户需要按住点击的时间(秒)以触发长按事件

    public event Action<LongClickable> OnLongClick; // 定义长按事件

    public StateEnum State { get { return _State; } } // 当前点击项的状态

    float _PressedTime; // 指针按下时的时间
    StateEnum _State; // 当前点击项的状态

    /// <summary>
    /// 枚举表示点击项的不同状态
    /// </summary>
    public enum StateEnum
    {
        NOT_PRESSING, // 未按下
        PRESSING_WAITING_FOR_LONG_CLICK, // 按下,等待是否触发长按
        PRESSING_AFTER_LONG_CLICK // 按下,长按已触发
    }

    /// <summary>
    /// 每帧调用,用于检查是否达到长按时间
    /// </summary>
    void Update()
    {
        if (_State == StateEnum.PRESSING_WAITING_FOR_LONG_CLICK)
        {
            // 检查自指针按下以来的时间是否超过长按时间
            if (Time.unscaledTime - _PressedTime >= longClickTime)
            {
                _State = StateEnum.PRESSING_AFTER_LONG_CLICK; // 更新状态以指示长按已触发
                OnLongClick?.Invoke(this); // 触发长按事件
            }
        }
    }

    #region Unity UI 事件处理回调

    /// <summary>
    /// 当指针按下时调用
    /// </summary>
    /// <param name="eventData">与指针事件相关的数据</param>
    public void OnPointerDown(PointerEventData eventData)
    {
        if (eventData.button != PointerEventData.InputButton.Left) // 确保仅处理左键点击
            return;

        _State = StateEnum.PRESSING_WAITING_FOR_LONG_CLICK; // 更新状态以指示项被按下
        _PressedTime = Time.unscaledTime; // 记录指针按下的时间
    }

    /// <summary>
    /// 当指针松开时调用
    /// </summary>
    /// <param name="eventData">与指针事件相关的数据</param>
    public void OnPointerUp(PointerEventData eventData)
    {
        if (eventData.button != PointerEventData.InputButton.Left) // 确保仅处理左键松开
            return;

        _State = StateEnum.NOT_PRESSING; // 更新状态以指示项未被按下

    }

    #endregion
}
/****************************************************
    文件:LongClickableItem.cs
	作者:Edision
    日期:#CreateTime#
	功能:UI 元素
*****************************************************/
using UnityEngine;


[RequireComponent(typeof(LongClickable))]
public class LongClickableItem : MonoBehaviour
{
    private void Awake()
    {
        LongClickable item = GetComponent<LongClickable>();
        item.OnLongClick += HandleLongClick;

        
    }

    void HandleLongClick(LongClickable clickedItem)
    {
        Debug.Log("长按事件触发!");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2308076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Netty为什么性能很高?

大家好&#xff0c;我是锋哥。今天分享关于【Netty为什么性能很高?】面试题。希望对大家有帮助&#xff1b; Netty为什么性能很高? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty是一款高性能的网络通信框架&#xff0c;主要用于构建高性能的网络应用程序。…

[深度学习] 大模型学习2-提示词工程指北

在文章大语言模型基础知识里&#xff0c;提示词工程&#xff08;Prompt Engineering&#xff09;作为大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;应用构建的一种方式被简要提及&#xff0c;本文将着重对该技术进行介绍。 提示词工程就是在和LLM聊…

基于POI的Excel下拉框自动搜索,包括数据验证的单列删除

目录 目标 例子 1.搜索下拉框页 2.数据源页 3.效果 代码以及注意事项 1.代码 2.注意事项 1.基于Excel的话&#xff0c;相当于加入了一个【数据验证】 2.代码中的一些方法说明 目标 期望在Excel利用代码创建具备自动搜索功能的下拉框 例子 1.搜索下拉框页 2.数据源…

Python 数据可视化(一)熟悉Matplotlib

目录 一、安装包 二、先画个折线图 1、修改标签文字和线条粗细 2、内置样式 3、scatter() 绘制散点图 4、scatter() 绘制多个点 5、设置样式 6、保存绘图 数据可视化指的是通过可视化表示来探索和呈现数据集内的规律。 一、安装包 win R 打开终端 安装 Matplotlib&…

考研出分24小时,人类精神状态图鉴

2月24日&#xff0c;上午10点起&#xff0c;各省考研初试成绩陆续公布&#xff0c;考生们或紧张的输入准考证号&#xff0c;或抱团等待“审判”。然而更魔幻的还在后头——下午4点&#xff0c;教育部竟在同一天直接发布了《2025年研考国家分数线》。 不少网友表示&#xff1a;…

神经网络AI原理回顾

长期记忆存储在大模型的参数权重中&#xff0c;不经过推理和编码无法读取&#xff0c;且必须依赖输入的提示&#xff0c;因为大模型不会无缘无故的自言自语&#xff0c;毕竟输入层是它唯一 与外界交互的窗口。 目前个性化大模型的局限就是训练成本过高&#xff0c;除非使用RAG&…

数据库导出

MySQL数据库 使用命令行导出 导出整个数据库&#xff1a;在命令行中输入mysqldump -u用户名 -p密码 数据库名 > 导出文件路径/文件名.sql。例如mysqldump -uroot -p123456 mydb > /home/user/mydb_backup.sql&#xff0c;回车后输入密码即可将名为mydb的数据库导出为SQL…

进程间通信 —— 共享内存

目录 1.共享内存实现通信的原理 2.如何使用共享内存实现通信 共享内存通信接口介绍 shmget shmat shmdt shmctl 使用示例 key和shmid 3.共享内存通信的优缺点 缺点&#xff1a;不提供任何同步机制&#xff0c;可能会造成数据混乱。 优点&#xff1a;共享内存是进程…

本地搭建dify结合ollama+deepseek方法详解

1.安装ollama,安装deepseek-r1:8b模型 2.安装dify社区版 访问Dify GitHub项目地址 git clone https://github.com/langgenius/dify.git cd dify/docker cp .env.example .env docker compose up -d docker compose ps 查重以下实例是否启动成功&#xff1a; 更新Dif…

Linux系统软件管理

systemctl 控制软件启动和关闭 Linux系统很多软件支持使用systemctl命令控制&#xff1a;启动&#xff0c;停止&#xff0c;开启自启。 能被systemctl管理的软件&#xff0c;一般被称为&#xff1a;服务。 语法&#xff1a;systemctl start|stop|status|enable|disable 服务名…

在Linux桌面上创建Idea启动快捷方式

1、在桌面新建idea.desktop vim idea.desktop [Desktop Entry] EncodingUTF-8 NameIntelliJ IDEA CommentIntelliJ IDEA Exec/home/software/idea-2021/bin/idea.sh Icon/home/software/idea-2021/bin/idea.svg Terminalfalse TypeApplication CategoriesApplication;Developm…

从0开始的操作系统手搓教程19:构建我们的内存管理——第二步:内存子系统进化,获取页!

目录 讨论页表的分析和索引的完成 完成一个宽泛的页获取 从指定的内存池中分配若干页 获取准备用来提供给客户端方向的虚拟地址起始位置 根据内存池的选择&#xff0c;完成对物理内存的获取 关联我们的物理内存和虚拟内存 编写尝试 运行的截图 现在&#xff0c;我们将会…

数学软件Matlab下载|支持Win+Mac网盘资源分享

如大家所了解的&#xff0c;Matlab与Maple、Mathematica并称为三大数学软件。Matlab应用广泛&#xff0c;常被用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人&#xff0c;控制系统等领域。 Matlab将数值分析、矩阵计算、科学…

FASIONAD:自适应反馈的类人自动驾驶中快速和慢速思维融合系统

24年11月来自清华、早稻田大学、明尼苏达大学、多伦多大学、厦门大学马来西亚分校、电子科大&#xff08;成都&#xff09;、智平方科技和河南润泰数字科技的论文“FASIONAD : FAst and Slow FusION Thinking Systems for Human-Like Autonomous Driving with Adaptive Feedbac…

R语言+AI提示词:贝叶斯广义线性混合效应模型GLMM生物学Meta分析

全文链接&#xff1a;https://tecdat.cn/?p40797 本文旨在帮助0基础或只有简单编程基础的研究学者&#xff0c;通过 AI 的提示词工程&#xff0c;使用 R 语言完成元分析&#xff0c;包括数据处理、模型构建、评估以及结果解读等步骤&#xff08;点击文末“阅读原文”获取完整代…

2020年蓝桥杯Java B组第二场题目+部分个人解析

#A&#xff1a;门牌制作 624 解一&#xff1a; public static void main(String[] args) {int count0;for(int i1;i<2020;i) {int ni;while(n>0) {if(n%102) {count;}n/10;}}System.out.println(count);} 解二&#xff1a; public static void main(String[] args) {…

【Azure 架构师学习笔记】- Azure Databricks (13) -- 搭建Medallion Architecture part 1

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (12) – Medallion Architecture简介 前言 上文已经介绍了关于Medallion的知识&#xff0c;本文开始用ADB 来实现&#xff0c; 但是基于内容较…

2025年2月21日优雅草内测分发站全新升级-测试运营-优雅草内测分发站新用户提供免费100下载点-2月28日正式运营并且提供私有化部署版本

2025年2月21日优雅草内测分发站全新升级-测试运营-优雅草内测分发站新用户提供免费100下载点-2月28日正式运营并且提供私有化部署版本 说明 优雅草内测分发站新用户提供免费100下载点&#xff0c;优雅草分运营站和demo测试站 运营站&#xff1a;www.youyacao.cn 提供免费100…

通过 PromptTemplate 生成干净的 SQL 查询语句并执行SQL查询语句

问题描述 在使用 LangChain 和 Llama 模型生成 SQL 查询时&#xff0c;遇到了 sqlite3.OperationalError 错误。错误信息如下&#xff1a; OperationalError: (sqlite3.OperationalError) near "sql SELECT Name FROM MediaType LIMIT 5; ": syntax error [SQL: …

IP段转CIDR:原理Java实现

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…