気ままなUnityエンジニアブログ

新米Unityエンジニアが送る解説アウトプットブログです。Twitter : @UjinUnity

MENU

【Unity】ボタン長押しでゲージ増加処理を作ってみた(UniRx)

スポンサーリンク

f:id:Wojtek:20190525212449g:plain

経験値バーの様に「ボタンを押している間ゲージを伸ばす処理」を作ってみました。

追記として「ボタンを離した場合の処理」も実装しました。

 

実装

 

f:id:Wojtek:20190525213926p:plain

今回はUniRxを使用して作成しました。

isCilck変数がトリガーとなっており、内部の処理は「指を離した場合」の処理になります。

SelectManyは別のObservableを作り出せます。この場合は「2秒間待機」する処理になります。

TakeUntilは指定したOnNextがくるまでストリームの処理を実行します。

今回は「ボタンが押されていない場合は長押し処理」を実行し続けます。

RepeatUntilDestoryはオブジェクトが破棄されるまでSubscribeを繰り返す処理です。

UniRxのストリームは削除しないと常に残り続けるので注意が必要です。

Subscribeは実行する処理を予約しておきます。

上記の条件をクリアしたらSubscribe内の処理が実行されます。

今回はisClikc.Valueの値を変化させています。

ReactivePropertyは値が変化したらOnNextが飛びます。

 

次はボタンの長押し、離した場合の処理を解説します。

 

f:id:Wojtek:20190525214014p:plain

OnPointerDown()で長押し判定をしています。

isClickの値をfalseにして、先ほどのストリームを実行させなくしています。

m_DisposeでonUpdateAsObservavleを格納しています。これは後ほど削除するためです。

このSelectManyの処理は「ゲージの増加スピード」を管理しています。

Subscribeでゲージを増やしそれをオブジェクトに反映しています。

その後pushTimeの値を少しづつ減らしていきます。

これによって、徐々にゲージを伸ばす処理が実装されます。

 

 OnPointerUp()は「ボタンから指を離した処理」です。

isClickをtrueにし、m_Disposeに格納したUpdate処理を削除しています。

Unity側での実装

f:id:Wojtek:20190525215909p:plain

imageが今回伸ばすゲージです。

Buttonに先ほど作ったスクリプトをアタッチしましょう。

f:id:Wojtek:20190525215948p:plain

スクリプトとは別にEventTriggerをアタッチします。

先ほど作った関数をアタッチしましょう。

これでゲージを伸ばす処理が実行されました。

改善点

汎用性を高めるため、interface化するのもありだと思います。

また、ボタン部分と実行部分を分けてPrefab化し、中身の処理はコールバック化するのも良いと思いました。

まだまだ勉強中なので日々学んでいきたいと思います。