uniRXをuGUIと一緒にどう使っていくかを調べてつらつらと書いていく予定です。
クリック
button
.OnClickAsObservable ()
.Subscribe (_ => Debug.Log ("ButtonA Clicked"));
かんたん
長押し
こちらの
https://github.com/neuecc/UniRx#create-your-own-custom-triggers
Create your own custom triggersを参照
複数回タップ
長押しを参考に...
ObservablePluralTapTrigger.cs
using UnityEngine;
using UnityEngine.EventSystems;
using UniRx;
using UniRx.Triggers;
/**
* 複数回タップ取得トリガ
*/
public class ObservablePluralTapTrigger : ObservableTriggerBase, IPointerClickHandler
{
//最初のタップから何秒監視するか
public float TapTerm = 1f;
//watchするタップ数
public int TapCount = 2;
Subject<Unit> onPluralTap;
//経過時間
float elapsedTime;
//現在のタップカウント
int currentTapCount = 0;
void Update()
{
if (currentTapCount >= 1)
{
elapsedTime += Time.unscaledDeltaTime;
}
if (elapsedTime < TapTerm) {
if (currentTapCount == TapCount) {
if (onPluralTap != null)
{
Debug.LogError("onPluralTap");
onPluralTap.OnNext (Unit.Default);
}
ResetTap ();
} else if (currentTapCount > TapCount) {
ResetTap ();
}
} else
{
ResetTap ();
}
}
void IPointerClickHandler.OnPointerClick(PointerEventData eventData)
{
currentTapCount++;
}
void ResetTap()
{
elapsedTime = 0f;
currentTapCount = 0;
}
public IObservable<Unit> OnPluralTapAsObservable()
{
return onPluralTap ?? (onPluralTap = new Subject<Unit>());
}
protected override void RaiseOnCompletedOnDestroy()
{
if (onPluralTap != null)
{
onPluralTap.OnCompleted();
}
}
}
上記をUIPartsに貼付けて
var tapTrigger =
button.GetComponent<ObservablePluralTapTrigger> ();
tapTrigger.OnPluralTapAsObservable().Subscribe(_ => Debug.Log ("PluralTapped!!"));
こんな感じで監視すればok