チリペヂィア

リンクフリー。サンプルコードなどは関連記事内でライセンスについて明示されない限り商用利用なども自由に行って構いませんが、自己責任でお願いします。またこれら日記内容の著作権自体は放棄していません。引用部分については引用元の権利に従ってください。

エディタカスタマイズで押せないボタンを描く

もっとちゃんとした関数がありました。下記に記事を追加。
http://d.hatena.ne.jp/tiri_tomato/20140318/1395104788

こちらの古い記事は、EditorGUI名前空間が使えない状況では一応使えるかな、ということで残しておきます。

淡色モードが案外サポートされてないので、勝手に作れって事でしょうか。

// 淡色表示用のスタイルを返す
public static GUIStyle DimmedStyle(GUIStyle src)
{
    GUIStyle dimmed = new GUIStyle(src);
    GUIStyleState[] styleStates = new GUIStyleState[] {
        dimmed.normal, dimmed.active, dimmed.focused, dimmed.hover,
        dimmed.onActive, dimmed.onFocused, dimmed.onHover, dimmed.onNormal };
    foreach (GUIStyleState state in styleStates)
    {
        if (state != null)
        {
            Color color = state.textColor;
            if (float.Epsilon <= color.a)
            {
                color.a *= 0.25f;
                state.textColor = color;
            }
        }
    }
    return dimmed;
}

これでEditorStyles.miniButtonとDimmedStyle(EditorStyles.miniButton)を描いてみるとこんな感じ。淡色ボタンの方は押せる必要は無いのでラベルとしてレンダリング

EditorGUILayout.BeginHorizontal();
GUILayout.Button("miniButton", EditorStyles.miniButton);
GUILayout.Label("dimmedButton", DimmedStyle(EditorStyles.miniButton));
EditorGUILayout.EndHorizontal();

エディタ用のGUIって「驚き最小の原則」があるので、プログラマの実装に任せるのでは無く、出来れば画一的なメソッドとかUnity側にあればうれしいんですが。