Skip to content

Instantly share code, notes, and snippets.

@s2kw
Created February 1, 2017 10:05
Show Gist options
  • Save s2kw/e426f2d28756b43960dbb6d62d7e1e81 to your computer and use it in GitHub Desktop.
Save s2kw/e426f2d28756b43960dbb6d62d7e1e81 to your computer and use it in GitHub Desktop.
Unity uGUI用の長押し対応のコールバック機能付きマン
// namespace jigaX{
[RequireComponent(typeof(Button))]
public class UILongPressabbleButtonController : MonoBehaviour,IPointerDownHandler ,IPointerUpHandler {
public System.Action onPressReaction,onReleaseReaction;
public System.Action onLongPressReaction;
public float longPressThreshold
{
private get;
set;
}
bool pressed;
#region IPointerDownHandler
public virtual void OnPointerUp(PointerEventData eventData)
{
this.pressed = false;
if (this.onReleaseReaction != null) this.onReleaseReaction();
}
#endregion //IPointerDownHandler
#region IPointerDownHandler
public virtual void OnPointerDown(PointerEventData eventData)
{
this.pressed = true;
if (this.onPressReaction != null) this.onPressReaction();
this.StartLongPress();
}
#endregion //IPointerDownHandler
#region LongPress
public virtual void OnLongPress()
{
if (this.onLongPressReaction != null) this.onLongPressReaction();
}
void StartLongPress()
{
if (_LongPress != null)
{
StopCoroutine(this._LongPress);
}
this._LongPress = this.__LongPress();
StartCoroutine(this._LongPress);
}
IEnumerator _LongPress;
IEnumerator __LongPress()
{
var t = 0f;
while (this.pressed)
{
t += Time.deltaTime;
yield return true;
if ( t > this.longPressThreshold)
{
this.OnLongPress();
yield break;
}
}
}
#endregion // LongPress
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment