【Unity】ボタン長押しでゲージ増加処理を作ってみた(UniRx)
スポンサーリンク
経験値バーの様に「ボタンを押している間ゲージを伸ばす処理」を作ってみました。
追記として「ボタンを離した場合の処理」も実装しました。
実装
今回はUniRxを使用して作成しました。
isCilck変数がトリガーとなっており、内部の処理は「指を離した場合」の処理になります。
SelectManyは別のObservableを作り出せます。この場合は「2秒間待機」する処理になります。
TakeUntilは指定したOnNextがくるまでストリームの処理を実行します。
今回は「ボタンが押されていない場合は長押し処理」を実行し続けます。
RepeatUntilDestoryはオブジェクトが破棄されるまでSubscribeを繰り返す処理です。
UniRxのストリームは削除しないと常に残り続けるので注意が必要です。
Subscribeは実行する処理を予約しておきます。
上記の条件をクリアしたらSubscribe内の処理が実行されます。
今回はisClikc.Valueの値を変化させています。
ReactivePropertyは値が変化したらOnNextが飛びます。
次はボタンの長押し、離した場合の処理を解説します。
OnPointerDown()で長押し判定をしています。
isClickの値をfalseにして、先ほどのストリームを実行させなくしています。
m_DisposeでonUpdateAsObservavleを格納しています。これは後ほど削除するためです。
このSelectManyの処理は「ゲージの増加スピード」を管理しています。
Subscribeでゲージを増やしそれをオブジェクトに反映しています。
その後pushTimeの値を少しづつ減らしていきます。
これによって、徐々にゲージを伸ばす処理が実装されます。
OnPointerUp()は「ボタンから指を離した処理」です。
isClickをtrueにし、m_Disposeに格納したUpdate処理を削除しています。
Unity側での実装
imageが今回伸ばすゲージです。
Buttonに先ほど作ったスクリプトをアタッチしましょう。
スクリプトとは別にEventTriggerをアタッチします。
先ほど作った関数をアタッチしましょう。
これでゲージを伸ばす処理が実行されました。
改善点
汎用性を高めるため、interface化するのもありだと思います。
また、ボタン部分と実行部分を分けてPrefab化し、中身の処理はコールバック化するのも良いと思いました。
まだまだ勉強中なので日々学んでいきたいと思います。