Posted at

NGUI UIButtonをロングタップ対応

More than 3 years have passed since last update.


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

}