2018/08/20(月)【Unity】UniRx:ボタンクリック拡張

UniRxを使ってボタンクリックをラップする。

using System;
using UnityEngine;
using UnityEngine.UI;
using UniRx;
using UniRx.Triggers;

/// <summary>
/// Button拡張メソッド
/// </summary>
public static class nsButtonExtensions
{
    /// <summary>
    /// クリックアクション設定(引数なし)
    /// </summary>
    static public void SetClickAction(this Button self, UnityEngine.Events.UnityAction _onAction)
    {
        self.OnClickAsObservable().Subscribe(_ => { _onAction.Call(); });
    }

    /// <summary>
    /// クリックアクション設定(引数1つ)
    /// </summary>
    static public void SetClickAction<T>(this Button self, UnityEngine.Events.UnityAction<T> _onAction, T arg)
    {
        self.OnClickAsObservable().Subscribe(_ => { _onAction(arg); });
    }

    /// <summary>
    /// クリックアクション設定(引数2つ)
    /// </summary>
    static public void SetClickAction<T1, T2>(this Button self, UnityEngine.Events.UnityAction<T1, T2> _onAction, T1 arg1, T2 arg2)
    {
        self.OnClickAsObservable().Subscribe(_ => { _onAction(arg1, arg2); });
    }

    /// <summary>
    /// クリックアクション設定(引数3つ)
    /// </summary>
    static public void SetClickAction<T1, T2, T3>(this Button self, UnityEngine.Events.UnityAction<T1, T2, T3> _onAction, T1 arg1, T2 arg2, T3 arg3)
    {
        self.OnClickAsObservable().Subscribe(_ => { _onAction(arg1, arg2, arg3); });
    }
}

使い方

this.bind_button.SetClickAction(OnFunc());
OK キャンセル 確認 その他