当前位置: 首页 > news >正文

Unity长按按钮多次升级

方案一  事件接口

using UnityEngine;
using UnityEngine.EventSystems;

public class Test : MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IPointerExitHandler
{
    private float unitTime = 0.5f;//间隔时间
    private bool startClick;//是否在按压按钮
    private float recordTime = 0f;//记录时间
    
    private void Update()
    {
        if (startClick)
        {
            recordTime += Time.deltaTime;
            if (recordTime >= unitTime)
            {
                Debug.Log("升级了");
                recordTime = 0f;
            }
        }
    }
    
    public void OnPointerDown(PointerEventData eventData)
    {
        Debug.Log("按下");
        startClick = true;
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        Debug.Log("松开");
        startClick = false;
        recordTime = 0f;
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        Debug.Log("离开了");
        startClick = false;
        recordTime = 0f;
    }
}

方案二  EventTrigger

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;

public class Test : MonoBehaviour
{
    public GameObject target;
    private float unitTime = 0.5f;//间隔时间
    private bool startClick;//是否在按压按钮
    private float recordTime = 0f;//记录时间
    
    private void Start()
    {
        List<EventTrigger.Entry> entryList = new List<EventTrigger.Entry>();
        
        //按下
        entryList.Add(GetNewEntry(EventTriggerType.PointerDown, (data) =>
        {
            Debug.Log("按下");
            startClick = true;
        }));
        
        //松开按钮
        entryList.Add(GetNewEntry(EventTriggerType.PointerUp, (data) =>
        {
            Debug.Log("松开");
            startClick = false;
            recordTime = 0f;
        }));
        
        //离开交互区
        entryList.Add(GetNewEntry(EventTriggerType.PointerExit, (data) =>
        {
            Debug.Log("离开了");
            startClick = false;
            recordTime = 0f;
        }));
        
        EventTrigger trigger = target.AddComponent<EventTrigger> ();
        trigger.triggers.AddRange(entryList);
    }
    
    private void Update()
    {
        if (startClick)
        {
            recordTime += Time.deltaTime;
            if (recordTime >= unitTime)
            {
                Debug.Log("升级了");
                recordTime = 0f;
            }
        }
    }
    
    public EventTrigger.Entry GetNewEntry(EventTriggerType type, UnityAction<BaseEventData> callback)
    {
        EventTrigger.Entry entry = new EventTrigger.Entry ();
        entry.eventID = type;
        entry.callback.AddListener(callback);
        return entry;
    }
}

相关文章:

  • nordic(nrf52832、nrf52840)如何使用SES(SEGGER Embedded Studio)编辑编译工程?
  • 无符号整数和带符号整数的相互转换
  • 神经网络剪枝技术的重大突破:sGLP-IB与sTLP-IB
  • 向量库(Vector Database)
  • [笔记.AI]如何判断模型是否通过剪枝、量化、蒸馏生成?
  • 深入探索SQLAlchemy:模型定义与操作
  • 如何在本地和线上安装和配置RabbitMQ
  • 多种方式获取用户的相似度(附python源码)
  • 【Linux-网络】HTTP的清风与HTTPS的密语
  • Node.js 中 cookie-parser 依赖详解
  • 一种最常见的js加密解密
  • DeepSeek学术指南:DeepSeek在学术翻译改写能力应用操作案例!
  • Salesforce 检索Layout的设定
  • 深入理解Java中的ConcurrentSkipListMap
  • 【DeepSeek】Mac m1电脑部署DeepSeek
  • #渗透测试#批量漏洞挖掘#Fastjson 1.2.24 远程命令执行漏洞
  • EasyX安装及使用
  • FastDDS示例Windows下编译
  • Android程序自身重启程序的几种方法
  • 手写数字识别的神经网络 2层神经网络的类 代码详解
  • 定位真核生物起源于约27.2亿年前,华东师大团队在《自然》发文
  • 五一期间7名游客接连被困青海荒漠,警方提醒严禁非法穿越
  • 中国驻俄大使张汉晖人民日报撰文:共襄和平伟业,续谱友谊新篇
  • 《中国医药指南》就涉宫颈癌等论文出现男性病例致歉:辞退涉事编辑
  • 世界哮喘日丨张旻:哮喘的整体诊断率不足三成,吸入治疗是重要治疗手段
  • 习近平给谢依特小学戍边支教西部计划志愿者服务队队员回信