うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】自分以下の Graphic 継承の色を一括で変更する

CanvasGroup のように Graphic のColor を書き換えずに
一括で色変更をしてみようと CanvasGroup のコードをみたところ
ネイティブの処理で記述されているらしく同じようなものはできなかったので
とりあえず無理やり作ってみましたが微妙なやつです

using System;
using UnityEngine;
using UnityEngine.UI;

public class GraphicColor : MonoBehaviour
{
    [NonSerialized]
    private Graphic[] _graphics;

   #if UNITY_EDITOR
    private void OnValidate()
    {
        SetColor();
    }

#endif

    private void Awake()
    {
        SetColor();
    }

    private void SetColor()
    {
        _graphics = GetComponentsInChildren<Graphic>();
        foreach (var graphic in _graphics)
            graphic.color = _color;
    }

    [SerializeField]
    private Color _color;
    public Color Color
    {
        get => _color;
        set
        {
            _color = value;
            foreach (var graphic in _graphics)
                graphic.color = _color;
        }
    }
}