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());