「Unity/UniRx/TMPro」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし |
|||
| (同じ利用者による、間の11版が非表示) | |||
| 1行目: | 1行目: | ||
==TMP_DropDownサンプル== | ==TMP_DropDownサンプル== | ||
ObserveEveryValueChangedを使う場合 | |||
<pre> | <pre> | ||
using UnityEngine; | using UnityEngine; | ||
| 9行目: | 10行目: | ||
void Start() | void Start() | ||
{ | { | ||
TextMeshProUGUI tmpText = GameObject.Find("Text (TMP)").GetComponent<TextMeshProUGUI>(); | |||
TMP_Dropdown tmpDropdown = GameObject.Find("TmpDropdown").GetComponent<TMP_Dropdown>(); | TMP_Dropdown tmpDropdown = GameObject.Find("TmpDropdown").GetComponent<TMP_Dropdown>(); | ||
tmpDropdown.ObserveEveryValueChanged( | tmpDropdown.ObserveEveryValueChanged(x => x.value) | ||
.Subscribe(index => { | .Subscribe(index => { | ||
var value = dropdown.options[index].text; | var value = dropdown.options[index].text; | ||
text.text = value; | tmpText.text = value; | ||
}) | |||
.AddTo(gameObject); | |||
} | |||
} | |||
</pre> | |||
AsObservableを使う場合 | |||
<pre> | |||
using UnityEngine; | |||
using UnityEngine.UI; | |||
using UniRx; | |||
using TMPro; | |||
public class SampleScene : MonoBehaviour | |||
{ | |||
void Start() | |||
{ | |||
TextMeshProUGUI tmpText = GameObject.Find("Text (TMP)").GetComponent<TextMeshProUGUI>(); | |||
TMP_Dropdown tmpDropdown = GameObject.Find("TmpDropdown").GetComponent<TMP_Dropdown>(); | |||
tmpDropdown.onValueChanged.AsObservable() | |||
.Subscribe(index => | |||
{ | |||
var value = tmpDropdown.options[index].text; | |||
tmpText.text = value; | |||
}) | |||
.AddTo(gameObject); | |||
} | |||
} | |||
</pre> | |||
OnValueChangedAsObservableを作る形式。別途、下にあるようにUnityUIComponentExtensions.csに、OnValueChangedAsObservableを作る | |||
<pre> | |||
using UnityEngine; | |||
using UnityEngine.UI; | |||
using UniRx; | |||
using TMPro; | |||
public class SampleScene : MonoBehaviour | |||
{ | |||
void Start() | |||
{ | |||
TextMeshProUGUI tmpText = GameObject.Find("Text (TMP)").GetComponent<TextMeshProUGUI>(); | |||
TMP_Dropdown tmpDropdown = GameObject.Find("TmpDropdown").GetComponent<TMP_Dropdown>(); | |||
tmpDropdown.OnValueChangedAsObservable() | |||
.Subscribe(index => | |||
{ | |||
var value = dropdown.options[index].text; | |||
tmpText.text = value; | |||
}) | }) | ||
.AddTo(gameObject); | .AddTo(gameObject); | ||
| 22行目: | 68行目: | ||
==UnityUIComponentExtensions.csへusing TMPro;が追加できない問題== | ==UnityUIComponentExtensions.csへusing TMPro;が追加できない問題== | ||
別途、アプリ側のScriptディレクトリに、UnityUIExtensionsを作れば良い。 | |||
UnityUIExtensions.cs | |||
<pre> | |||
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 | |||
} | |||
} | |||
</pre> | |||
参考:https://github.com/neuecc/UniRx/issues/352 | 参考:https://github.com/neuecc/UniRx/issues/352 | ||
==InputFieldのTMPro== | |||
<pre> | |||
TMP_InputField tmpInputField = GameObject.Find("InputField (TMP)").GetComponent<TMP_InputField>(); | |||
// 入力してフォーカスを外したら | |||
tmpInputField.onEndEdit.AsObservable().Subscribe(value => | |||
{ | |||
Debug.Log("value=" + value); | |||
// tmpInputField.text = value; | |||
}); | |||
// 入力中 | |||
IObservable<string> onValueChangedObservable = tmpInputField.onValueChanged.AsObservable(); | |||
onValueChangedObservable.Subscribe(value => | |||
{ | |||
Debug.Log("value=" + value); | |||
}); | |||
</pre> | |||
参考:https://qiita.com/su10/items/6d7fd792d4b553454a4f | |||
2025年4月24日 (木) 06:35時点における最新版
TMP_DropDownサンプル
ObserveEveryValueChangedを使う場合
using UnityEngine;
using UnityEngine.UI;
using UniRx;
using TMPro;
public class SampleScene : MonoBehaviour
{
void Start()
{
TextMeshProUGUI tmpText = GameObject.Find("Text (TMP)").GetComponent<TextMeshProUGUI>();
TMP_Dropdown tmpDropdown = GameObject.Find("TmpDropdown").GetComponent<TMP_Dropdown>();
tmpDropdown.ObserveEveryValueChanged(x => x.value)
.Subscribe(index => {
var value = dropdown.options[index].text;
tmpText.text = value;
})
.AddTo(gameObject);
}
}
AsObservableを使う場合
using UnityEngine;
using UnityEngine.UI;
using UniRx;
using TMPro;
public class SampleScene : MonoBehaviour
{
void Start()
{
TextMeshProUGUI tmpText = GameObject.Find("Text (TMP)").GetComponent<TextMeshProUGUI>();
TMP_Dropdown tmpDropdown = GameObject.Find("TmpDropdown").GetComponent<TMP_Dropdown>();
tmpDropdown.onValueChanged.AsObservable()
.Subscribe(index =>
{
var value = tmpDropdown.options[index].text;
tmpText.text = value;
})
.AddTo(gameObject);
}
}
OnValueChangedAsObservableを作る形式。別途、下にあるようにUnityUIComponentExtensions.csに、OnValueChangedAsObservableを作る
using UnityEngine;
using UnityEngine.UI;
using UniRx;
using TMPro;
public class SampleScene : MonoBehaviour
{
void Start()
{
TextMeshProUGUI tmpText = GameObject.Find("Text (TMP)").GetComponent<TextMeshProUGUI>();
TMP_Dropdown tmpDropdown = GameObject.Find("TmpDropdown").GetComponent<TMP_Dropdown>();
tmpDropdown.OnValueChangedAsObservable()
.Subscribe(index =>
{
var value = dropdown.options[index].text;
tmpText.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
InputFieldのTMPro
TMP_InputField tmpInputField = GameObject.Find("InputField (TMP)").GetComponent<TMP_InputField>();
// 入力してフォーカスを外したら
tmpInputField.onEndEdit.AsObservable().Subscribe(value =>
{
Debug.Log("value=" + value);
// tmpInputField.text = value;
});
// 入力中
IObservable<string> onValueChangedObservable = tmpInputField.onValueChanged.AsObservable();
onValueChangedObservable.Subscribe(value =>
{
Debug.Log("value=" + value);
});