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

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;
    }
}

http://www.kler.cn/a/553062.html

相关文章:

  • java数据结构_优先级队列(堆)_6.2
  • Github 2025-02-19C开源项目日报 Top9
  • 基于 Spring Boot 和微信小程序的仓储管理系统设计与实现
  • 伯克利 CS61A 课堂笔记 10 —— Trees
  • Python学习心得常用的内置函数
  • anythingllm服务器部署+ollama+deepseek+实现本地知识库问答
  • MySQL数据库类型——包括数据类型、文本、二进制类型、时间日期、String等,会对数值进行越界测试
  • Mac OS JAVA_HOME设置
  • Spring Bean 生命周期的执行流程详解
  • Winsows系统中安装docker desktop并搭建深度学习开发环境
  • cluster-smi 命令详解
  • 游戏引擎学习第109天
  • 为AI聊天工具添加一个知识系统 之112 详细设计之53 3*3 记忆矩阵
  • 【R语言】主成分分析与因子分析
  • Ansys 2025 R1 | 以强大数字工程技术增强协作,拓展云计算及AI并赋能数据洞察
  • 【大模型】DeepSeek:AI浪潮中的破局者
  • 【C#】无法安装程序包“DotSpatial.Symbology 4.0.656”
  • Android 动态加入Activity 时 manifest 注册报错解决。使用manifestPlaceholders 占位
  • 盒马“需要”马云认同
  • 使用python的akshare库读取股票实时数据并保存