MRが楽しい

MRやVRについて学習したことを書き残す

UniRxのOnClickAsObservableを使ってボタンの押下イベントを受け取る

本日はUniRxの小ネタ枠です。
UniRxのOnClickAsObservableを使ってボタンの押下イベントを受け取る方法です。

前提条件

UniRxの環境構築手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

OnClickAsObservable

OnClickAsObservableはUniRxで拡張されるUnityEngine.UI.Buttonクラスの関数です。
UniRxをインポートした上で以下のように記述すると、ボタンのクリックイベントをIObservableとして扱うことができます。

button.OnClickAsObservable().Subscribe(_ => /*ボタン押下時イベント*/);

サンプルスクリプト

参照のボタン押下時にログを出力する以下のサンプルスクリプトを作成しました。
・OnClickTest.cs

using UniRx;
using UnityEngine;
using UnityEngine.UI;

public class OnClickTest : MonoBehaviour
{
    [SerializeField]
    private Button button;

    private void Start()
    {
        button.OnClickAsObservable()
            // ボタン押下時にログを出力する
            .Subscribe(_ => Debug.Log("ボタンが押されました"))
            // オブジェクトが破棄されるときに購読を解除する
            .AddTo(this);
    }
}

適当なオブジェクトにスクリプトを設定し、Button コンポーネントを持つオブジェクトへの参照を設定します。

シーンを再生してボタンを押下するとログが出力できました。

サンプルスクリプトのようにAddTo(this)を組み合わせて購読の解除に関する処理を合わせて記述するなどコードを簡潔に書くことができます。