【Unity】UniRx:ボタンの押しっぱなしを検知する
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 には話した時に呼びたい関数を登録して使用します。