【ハルシオンブログ】UniRxでボタンの押下処理をやってみよう。結構簡単にかけていいですね!
こんにちは。
坂内っす。
ポケットガール~受け継がれし希望~よろしくお願いします。
URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
URL(iOS):https://itunes.apple.com/jp/app/id1539553611
PV:
UniRxを使ってボタンを押したときの処理を簡単に紹介。
ButtonとImageをCanvasに配置して、ボタンを押すとImageのカラーをランダムに切り替えるような処理を書いてみた。
まずは今までの書き方。
UniRxを使わない時は、こんな感じに書いていたと思う。
onClickのAddListenerでやってました。
これをUniRxで書くとこんな感じに
なんぞ文字列としては、UniRxのほうが文字数多いけど・・・・
UniRxの利点はなんだろうか?
色々なことができるらしい。
とりあえず連打制御を追加してみましょう。
ThrottleFirstというのを追加しました。
引数の秒以下は再押下を受け付けないという感じです。
.ThrottleFirst(TimeSpan.FromMilliseconds(1000))
なので、「1秒以下の連打は受け付けない」といった感じでしょうか。
それと、「.TakeUntilDestroy(this)」もつけておきましょう。
ボタンがDestroyされた後も購読処理が残ってしまうので、メモリリークの対応として書いておいたほうがいいらしいです。
こんな感じでUniRxでも簡単にボタンの押下処理を書くことができます。
カンタンな紹介でした。
では、あでゅ~ノシ
坂内っす。
ポケットガール~受け継がれし希望~よろしくお願いします。
URL(Android):https://play.google.com/store/apps/details?id=com.halcyon.pocketgirl3
URL(iOS):https://itunes.apple.com/jp/app/id1539553611
PV:
UniRxを使ってボタンを押したときの処理を簡単に紹介。
ButtonとImageをCanvasに配置して、ボタンを押すとImageのカラーをランダムに切り替えるような処理を書いてみた。
まずは今までの書き方。
using UnityEngine;
using UnityEngine.UI;
public class Blog20240311 : MonoBehaviour
{
[SerializeField] Button btnProc;
[SerializeField] Image imgItem;
private void Start() {
// ボタンが押された時の処理
btnProc.onClick.AddListener(ChangeImageColor);
}
void ChangeImageColor() {
imgItem.color = Random.ColorHSV();
}
}
UniRxを使わない時は、こんな感じに書いていたと思う。
onClickのAddListenerでやってました。
これをUniRxで書くとこんな感じに
using UniRx;
using UnityEngine;
using UnityEngine.UI;
public class Blog20240311 : MonoBehaviour
{
[SerializeField] Button btnProc;
[SerializeField] Image imgItem;
private void Start() {
btnProc.OnClickAsObservable().Subscribe(_ => {
// ボタンが押された時の処理
ChangeImageColor();
});
}
void ChangeImageColor() {
imgItem.color = Random.ColorHSV();
}
}
なんぞ文字列としては、UniRxのほうが文字数多いけど・・・・
UniRxの利点はなんだろうか?
色々なことができるらしい。
とりあえず連打制御を追加してみましょう。
using System;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
public class Blog20240311 : MonoBehaviour
{
[SerializeField] Button btnProc;
[SerializeField] Image imgItem;
private void Start() {
btnProc.OnClickAsObservable()
.ThrottleFirst(TimeSpan.FromMilliseconds(1000))
.TakeUntilDestroy(this)
.Subscribe(_ => {
// ボタンが押された時の処理
ChangeImageColor();
});
}
void ChangeImageColor() {
imgItem.color = UnityEngine.Random.ColorHSV();
}
}
ThrottleFirstというのを追加しました。
引数の秒以下は再押下を受け付けないという感じです。
.ThrottleFirst(TimeSpan.FromMilliseconds(1000))
なので、「1秒以下の連打は受け付けない」といった感じでしょうか。
それと、「.TakeUntilDestroy(this)」もつけておきましょう。
ボタンがDestroyされた後も購読処理が残ってしまうので、メモリリークの対応として書いておいたほうがいいらしいです。
こんな感じでUniRxでも簡単にボタンの押下処理を書くことができます。
カンタンな紹介でした。
では、あでゅ~ノシ
Category: 開発日記(Unity)
| h o m e |