うにてぃブログ

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

【Unity】UnityEditor で Image の color を変えても変わらない問題

CustomEditor や EditorWindow で Image の color を変更しても反映されません
RectTransform の値をいじった際には即座に反映されます

using UnityEditor;
using UnityEngine;
using UnityEngine.UI;

public class SampleMonoBehaviour : MonoBehaviour
{
    public Image Image;
}

[CustomEditor(typeof(SampleMonoBehaviour))]
public class SampleMonoBehaviourEditor : Editor
{
    private SampleMonoBehaviour component;
    
    private void OnEnable()
    {
        component = target as SampleMonoBehaviour;
    }

    public override void OnInspectorGUI()
    {
        serializedObject.Update();
        if (GUILayout.Button("ChangeColor"))
        {
            component.Image.color = Color.cyan;
        }
        serializedObject.ApplyModifiedProperties();
    }
}

解決方法

こちらを解決するためには EditorUtility.SetDirty を利用します

       if (GUILayout.Button("ChangeColor"))
        {
            component.Image.color = Color.cyan;
            EditorUtility.SetDirty(component);
        }

原因を詳しくは知りませんが dirty フラグが立たないと内部的に反映されないようです

https://docs.unity3d.com/jp/460/ScriptReference/EditorUtility.SetDirty.html

リファレンスを読む限り

Unityが用意しているコンポーネントは内部でプロパティが変更した時にこの関数が呼び出されています

と記述されていますが、すべての変数で対応しているわけではなさそうです

また Image の color 以外でも起こる可能性があるので
値を入れても反映されない場合はこちらを試してみてください