MRが楽しい

MRやVRについて学習したことを書き残す

UnityでGraphic参照を使って様々なコンポーネントのカラーを一括管理する

本日はUnityの小ネタ枠です。
UnityでGraphic参照を使って様々なコンポーネントのカラーを一括管理する方法についてです。

Graphic基本クラス

Graphicは全てのビジュアルUIコンポーネントのための基本クラスです。
Graphicクラスを参照することで様々なビジュアルコンポーネントに対して共通の処理を行えます。
docs.unity3d.com

サンプルスクリプト

参照を設定したビジュアルコンポーネントの基本カラーを一括変更する以下のサンプルスクリプトを作成しました。
・GraphicTest.cs

using UnityEngine;
using UnityEngine.UI;

public class GraphicTest : MonoBehaviour
{
    [SerializeField] private Graphic[] _targetGraphicComponents;

    [SerializeField] private Color _enableColor = Color.white;
    [SerializeField] private Color _disableColor = Color.gray;

    [SerializeField] private bool _enable = true;
    
    // enableを変更するとInspector上で色が変わる
    private void OnValidate()
    {
        if (_targetGraphicComponents == null || _targetGraphicComponents.Length == 0)
        {
            return;
        }
        SetEnable(_enable);
    }
    
    private void SetEnable(bool enable)
    {
        foreach (var graphic in _targetGraphicComponents)
        {
            // 基本カラーを変更する
            graphic.color = enable ? _enableColor : _disableColor;
        }
    }
}

動作確認

以下のImageとTMP_Textコンポーネントで構成したUIオブジェクトを用意しました。

サンプルスクリプトを配置してImageとTMP_Textコンポーネントへの参照を設定します。
ImageとTMP_TextコンポーネントはともにGraphicを基本クラスに持つため、どちらもそのまま参照を設定することができます。

Enable変数を切り替えると、以下の通りImageとTMP_Textコンポーネントの基本カラーを一括で変更できました。