R3 に uGUI 関連の機能を追加する軽量ライブラリ.
ObservableUI は,R3(Reactive Extensions for Unity)を拡張し,Unity の uGUI と TextMeshPro コンポーネントに対するリアクティブな UI バインディングを提供する Unity パッケージです.
双方向データバインディング,Observable イベント,リアクティブコンポーネントラッパーを提供し,Unity でリアクティブなユーザーインターフェースを構築するための機能を提供します.
├── ObservableUI
├── Core
│ ├── Interfaces
│ ├── Components
│ ├── Extensions
├── Editor
Interfaces- Observable UI のインターフェース定義Components- Observable UI のコンポーネント実装Extensions- 拡張メソッド
R3 では uGUI に対する拡張メソッド(イベントObservable化やバインディングなど)が提供されています.
本ライブラリではこれらに,以下を追加します.
- 主要コンポーネントへの双方向バインド(
BindToXXX) TextMeshProコンポーネントの対応
Text (TMP):
stringRP.SubscribeToText(textMeshPro);
intRP.SubscribeToText(textMeshPro, value => t.text = $"{value} pt");InputField (TMP):
stringRP.BindToInputField(inputField);
intRP.BindToInputField(inputField, defaultValue: 0);
floatRP.BindToInputField(inputField, format: "F2", defaultValue: 0f);Dropdown (TMP):
intRP.BindToDropdown(dropdown);
enumRP.BindToDropdown(dropdown,
toDropdownValue: e => (int)e,
fromDropdownValue: i => (MyEnum)i);Slider:
floatRP.SubscribeToSlider(slider); // 単方向
floatRP.BindToSlider(slider); // 双方向Image:
floatObservable.SubscribeToImageFillAmount(image);
colorObservable.SubscribeToImageColor(image);Note
基本的にR3標準拡張メソッドと同様ですが,OnValueChangedAsObservableでは引数のwithCurrentValueで初期値でOnNextを発火するか選択できるようにしています.
Note
単方向バインドをSubscribeToXXX,双方向バインドをBindToXXXと命名しています.
InputField は文字列形式でユーザー入力を受け付けるため,常にパース処理を意識する必要があります.
Reactive InputField は文字列入力を内部で処理し,ReactiveProperty として外部に公開するラッパーコンポーネントです.Int や Float などのシンプルな入力用途で,拡張メソッドと合わせて使用すると便利です.
FloatReactiveInputField reactiveIF;
reactiveIF.ReactiveProperty
.Subscribe(value => Debug.Log(value))
.AddTo(this);- Unity
6000.0.30f1 - Unity UI
2.0.0 - Localization
1.5.4 - R3
- Window > Package ManagerからPackage Managerを開く
- 「+」ボタン > Add package from git URL
- 以下のURLを入力する
https://github.com/nitou-kanazawa/lib-unity-ObservableUI.git?path=ObservableUI/Assets/ObservableUI
あるいはPackages/manifest.jsonを開き、dependenciesブロックに以下を追記
{
"dependencies": {
"jp.nitou.observableui": "https://github.com/nitou-kanazawa/lib-unity-ObservableUI.git?path=ObservableUI/Assets/ObservableUI"
}
}
以下の機能は現在未実装または部分的に実装されています:
Vector2ReactiveInputField.TryParseFromView():NotImplementedExceptionをスローしますVector3ReactiveInputField.TryParseFromView():NotImplementedExceptionをスローしますAssets/ObservableUI/Localization/: 空のディレクトリ(将来の機能用)Assets/ObservableUI/Core/Utilities/: 空のディレクトリ(将来の機能用)
