【Unity】UniRx:ボタンの押しっぱなしを検知する

DEVELOP, UniRx, Unity

Repeat ではなく RepeatUntilDestroy を使えば dispose しなくても自動的に処理を止めることができます。

using UnityEngine;
using UniRx;
using UniRx.Triggers;
/// <summary>
/// 押し続け判定
/// </summary>
public class KeepPressTrigger : MonoBehaviour
{
    public UnityEngine.Events.UnityAction KeepSubscribe { set; private get; }
    public UnityEngine.Events.UnityAction ReleaseSubscribe { set; private get; }
    void Start ()
    {
        ObservableEventTrigger trigger = this.gameObject.AddComponent<ObservableEventTrigger>();
        this.UpdateAsObservable()
                           .SkipUntil(trigger.OnPointerDownAsObservable())
                           .TakeUntil(trigger.OnPointerUpAsObservable()
                                      .Do(_ => { ReleaseSubscribe.Call(); }))
                           .RepeatUntilDestroy(this)
                           .Subscribe(_ => { KeepSubscribe.Call(); });
    }
}

KeepSubscribe には押し続けている時に呼びたい関数を、ReleaseSubscribe には話した時に呼びたい関数を登録して使用します。

Posted by kazupon