下記コードのように、オブジェクトのタッチを検知して、タッチ時の処理を行うコードを記載しました。
タップされると、TouchButton()を呼び出します。
TouchButton()の中では、
・currentCoolTimeを設定(仮に5秒とする)
・コルーチンで0.1秒ごとにcurrentCoolTimeを0.1減少させていく
・currentCoolTimeが0になったら終了
という流れの処理が行われます。
クールタイム中は押下できないようにWhereで条件を設定していますが、連打した際に稀に複数回呼び出されてしまっているような挙動をしておりました。※明らかに5秒より早いクールタイムの経過となることがある
そのため、ThrottleFirstを追加して短時間でのボタン連打を抑止しようとしましたが、こちらも結果は変わらずでした。
自分がThrottleFirstの機能を誤解しているのか、このような動作となる原因についてご存じありませんでしょうか。
c#
1 gameObject.GetComponent<TapGesture>() 2 .TapAsObservable() 3 .ThrottleFirst(TimeSpan.FromMilliseconds(1000)) 4 .Where(_ => currentCoolTime.Value == 0) 5 .Subscribe(_ => TouchButton()) 6 .AddTo(this.gameObject);
※TapGestureはTouchScriptというAssetの機能で、TapAsObservableはTapGestureの検知用に拡張して実装されています。
【追記】
いろいろと検証してみたところ、どうやら連打ではなく特定のタイミングで押下した際に複数処理が呼ばれているようです。
タイミングとしては、クールタイムが丁度終了となる当たりでタップするとほぼ再現しました。
また、複数処理が呼ばれているといっても、コルーチンで行っているクールタイム計算の処理のみが複数呼ばれているようなのです。
※押した際にカウンタを計上するようにしてみましたが、カウンタは1しか増加しなかったため
回答1件
あなたの回答
tips
プレビュー