UniRx is a re-implementation of the .NET Reactive Extensions for Unity. UniRx allows you to use reactive programming , a declarative programming paradigm.
For example, using SubscribeToText method helps to subscribe an IObservable to a Unity Text component.
Example from the official documentation:
public Toggle MyToggle;
public InputField MyInput;
public Text MyText;
public Slider MySlider;
// On Start, you can write reactive rules for declaretive/reactive ui programming
void Start()
{
// Toggle, Input etc as Observable (OnValueChangedAsObservable is a helper providing isOn value on subscribe)
// SubscribeToInteractable is an Extension Method, same as .interactable = x)
MyToggle.OnValueChangedAsObservable().SubscribeToInteractable(MyButton);
// Input is displayed after a 1 second delay
MyInput.OnValueChangedAsObservable()
.Where(x => x != null)
.Delay(TimeSpan.FromSeconds(1))
.SubscribeToText(MyText); // SubscribeToText is helper for subscribe to text
// Converting for human readability
MySlider.OnValueChangedAsObservable()
.SubscribeToText(MyText, x => Math.Round(x, 2).ToString());
}
Given the TextMeshPro integration in Unity there is a need to extend SubscribeToText to support Text Mesh Pro components.
One way to do this is to create a UnityUIExtensions.cs file inside your Unity project and add the following code:
using System;
using TMPro;
namespace UniRx.Extensions
{
public static class UnityUIExtensions
{
public static IDisposable SubscribeToText(this IObservable<string> source, TextMeshProUGUI text)
{
return source.SubscribeWithState(text, (x, t) => t.text = x);
}
public static IDisposable SubscribeToText<T>(this IObservable<T> source, TextMeshProUGUI text)
{
return source.SubscribeWithState(text, (x, t) => t.text = x.ToString());
}
}
}
GitHub Gist: link