LoginSignup
14
11

More than 5 years have passed since last update.

uGUI + uniRXことはじめ

Posted at

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

以後追記予定です。

14
11
8

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
14
11