facebook twitter hatena line email

Unity/UniRx/TMPro

提供: 初心者エンジニアの簡易メモ
2021年9月6日 (月) 18:01時点におけるAdmin (トーク | 投稿記録)による版 (UnityUIComponentExtensions.csへusing TMPro;が追加できない問題)

移動: 案内検索

TMP_DropDownサンプル

using UnityEngine;
using UnityEngine.UI;
using UniRx;
using TMPro;
public class SampleScene : MonoBehaviour
{
    void Start()
    {
        Text text = GameObject.Find("Text").GetComponent<Text>();
        TMP_Dropdown tmpDropdown = GameObject.Find("TmpDropdown").GetComponent<TMP_Dropdown>();
        tmpDropdown.ObserveEveryValueChanged(_ => _.value)
            .Subscribe(index => {
                var value = dropdown.options[index].text;
                text.text = value;
            })
            .AddTo(gameObject);
    }
}

UnityUIComponentExtensions.csへusing TMPro;が追加できない問題

別途、アプリ側のScriptディレクトリに、UnityUIExtensionsを作れば良い。

UnityUIExtensions.cs

sing System;
using TMPro;

namespace UniRx
{
    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());
        }
#if UNITY_5_3_OR_NEWER
        public static IObservable<int> OnValueChangedAsObservable(this TMP_Dropdown dropdown)
        {
            return Observable.CreateWithState<int, TMP_Dropdown>(dropdown, (d, observer) =>
            {
                observer.OnNext(d.value);
                return d.onValueChanged.AsObservable().Subscribe(observer);
            });
        }
#endif
    }
}

参考:https://github.com/neuecc/UniRx/issues/352