この投稿ではUnityにおいて、トグルのオン・オフの変更に連動し、ボタンの有効・無効を変化させるコードをUniRxで簡潔に記述する方法とそのポイントを紹介します。
コード
ButtonEnabling.cs
using UnityEngine;
using UnityEngine.UI;
using UniRx;
public class ButtonEnabling : MonoBehaviour
{
[SerializeField]
private Toggle toggle;
[SerializeField]
private Button button;
void Awake()
{
toggle.OnValueChangedAsObservable().SubscribeToInteractable(button);
}
}
ポイント1
onValueChanged.AsObservable()
でなくて、
OnValueChangedAsObservable()
を使う。
onValueChanged.AsObservable()
を使って、もし初期値が
- トグルがオフだけど、ボタンが有効
- トグルがオンだけど、ボタンが無効
のどちらかであった場合(言い換えると初期の論理状態が正しくない場合)、一度トグルを押すまで正しい状態にならない。
ポイント2
SubscribeToInteractable
を使う。(SubscribeToInteractableメソッド(github))
toggle.OnValueChangedAsObservable().Subscribe(isInteractable => button.interactable = isInteractable);
は、
toggle.OnValueChangedAsObservable().SubscribeToInteractable(button);
って短くかける。
Unityエディタ上でノーコーディングでもできる
UnityEvent+Unityのエディタ拡張の機能により、コードなしでも設定できます。