Unity入門

【Unity】Toggleの状態取得(isOn)とonValueChangedイベントの使い方

この記事について

この記事ではToggleの状態取得とonValueChangedイベントについてスクリプト制御する方法について説明します。

この記事でわかること

  • toggle.isOn でチェックの有無を取得・設定できる
  • onValueChanged.AddListener で切り替えイベントを処理できる

Toggleとは?

Toggleについては以下の記事を参考にしてください。

Toggleをスクリプトで参照する準備

ヒエラルキーで右クリックをしてToggle、TextMeshPro、空のGameObjectを用意します。
・「右クリック」→「UI」→「Toggle」
・「右クリック」→「UI」→「Text – TextMeshPro」
・「右クリック」→「Create Empty」

次にスクリプトを作成して「Create Empty」にアタッチしてください。

isOnで状態を取得・変更する方法

今回はToggleの「isOn」で状態を変更し、取得した状態をテキストに反映します。

using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class Toggle_Test : MonoBehaviour
{
    [SerializeField] private TMP_Text testText;
    [SerializeField] private Toggle testToggle;

    void Start()
    {
        // GameObjectにアタッチされている子オブジェクトのTMP_Textを取得
        testText = this.GetComponentInChildren<TMP_Text>();
        // GameObjectにアタッチされている子オブジェクトのToggleを取得
        testToggle = this.GetComponentInChildren<Toggle>();

        // OFFに強制設定
        testToggle.isOn = false;
        testText.text = testToggle.isOn.ToString();
    }
}

実行してみると、チェックが外れてFalseとなりましたね。

onValueChangedでイベント処理する方法

イベント「onValueChanged」を設定することでToggleの状態を監視していきます。

using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class Toggle_Test : MonoBehaviour
{
    [SerializeField] private TMP_Text testText;
    [SerializeField] private Toggle testToggle;

    void Start()
    {
        // GameObjectにアタッチされている子オブジェクトのTMP_Textを取得
        testText = this.GetComponentInChildren<TMP_Text>();
        // GameObjectにアタッチされている子オブジェクトのToggleを取得
        testToggle = this.GetComponentInChildren<Toggle>();

        testText.text = testToggle.isOn.ToString();
        testToggle.onValueChanged.AddListener(OnToggleChanged);
    }

    private void OnToggleChanged(bool value)
    {
        testText.text = value.ToString();
    }
}

実行してみると反映されていることがわかりますね。

まとめ

  • toggle.isOn → 状態取得・設定ができる
  • toggle.onValueChanged → 値変更イベントを拾える