LoginSignup
5
4

More than 5 years have passed since last update.

NGUI UIButtonをロングタップ対応

Posted at

using UnityEngine;
using System.Collections;
using System;


[RequireComponent(typeof(UIButton))]
public class UIButtonLongTapComponent : MonoBehaviour
{

    [SerializeField]
    float intervalAction = 1.0f;

    float firstTapTime = 0f;
    bool isHoldAction;
    // 押しっぱなし時に呼び出すAction
    public Action OnLongTap = null;
    public Action OnShortTap = null;

    bool isPressing = false;

    void Update()
    {
        if (isPressing && isHoldAction && (firstTapTime + intervalAction < Time.realtimeSinceStartup)) {
            isPressing = false;
            LongTap ();
        }
    }

    void OnPress (bool pressed)
    {
        isPressing = pressed;
        if (pressed) {
            firstTapTime = Time.realtimeSinceStartup;
        }
        else
        {
            bool isLongTap = firstTapTime + intervalAction < Time.realtimeSinceStartup;
            if (!isHoldAction && isLongTap)
                LongTap();
            else if(!isLongTap)
                ShortTap();
        }
    }

    public void SetButtonAction(Action shortTap, Action longTap, bool isHoldLongTap) {
        isHoldAction = isHoldLongTap;
        OnLongTap = longTap;
        OnShortTap = shortTap;
    }

    public void CleanAction()
    {
        OnLongTap = null;
    }

    public void LongTap()
    {
        if (OnLongTap != null)
            OnLongTap ();
    }
    public void ShortTap()
    {
        if (OnShortTap != null)
            OnShortTap ();
    }

}


5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4