You need to enable JavaScript to run this app. Unity触摸检测:如何实现长按满0.5秒立即触发而非松手后触发
优惠活动
大模型
产品
解决方案
定价
更多

Unity触摸检测:如何实现长按满0.5秒立即触发而非松手后触发

触摸长按即时触发实现方案

实现思路

原有逻辑仅在触摸结束时判断触发事件,要实现按住满0.5秒立即触发长按,需新增状态标记位记录长按是否已触发,同时在触摸保持阶段实时检测按压时长,达到阈值后立即执行长按逻辑,避免后续误触单击事件。

完整修改后代码

private float TouchTime = 0;
// 标记长按是否已经触发,避免重复执行和误触单击
private bool isLongTapTriggered = false;
// 长按阈值常量,方便后续调整
private const float LONG_TAP_THRESHOLD = 0.5f;

void Update () {
    // 先判断是否存在触摸,避免数组越界报错
    if (Input.touchCount <= 0) return;
    
    Touch touch = Input.touches[0];

    if (touch.phase == TouchPhase.Began) {
        TouchTime = Time.time;
        // 每次新触摸按下时重置长按触发标记
        isLongTapTriggered = false;
    }

    // 触摸保持/移动阶段检测长按触发
    if (touch.phase == TouchPhase.Stationary || touch.phase == TouchPhase.Moved) {
        // 未触发过长按且按压时长达到阈值
        if (!isLongTapTriggered && Time.time - TouchTime >= LONG_TAP_THRESHOLD) {
            isLongTapTriggered = true;
            // 此处替换为你的长按执行逻辑
        }
    }

    if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled) {
        // 仅当长按未触发时才判断单击逻辑
        if (!isLongTapTriggered && Time.time - TouchTime <= LONG_TAP_THRESHOLD) {
            // 此处替换为你的单点轻触执行逻辑
        }
    }
}

配置说明

  • 如果不需要支持按住移动时触发长按,只需要把长按检测条件里的touch.phase == TouchPhase.Moved删掉即可
  • 新增的标记位isLongTapTriggered可以保证一次触摸流程中长按仅触发一次,同时避免长按后松手误触发单击事件
  • 提前判断Input.touchCount可以避免无触摸时访问Input.touches[0]导致的数组越界报错

内容的提问来源于stack exchange,提问作者Altresi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 18:36:02