コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】ContentSizeFitter の Inspector に FitMode を変更するボタンを追加するエディタ拡張

ソースコード

using System;
using UnityEditor;
using UnityEditor.UI;
using UnityEngine;
using UnityEngine.UI;

[CustomEditor( typeof( ContentSizeFitter ) )]
public sealed class ContentSizeFitterInspector : Editor
{
    private static readonly Type BASE_EDITOR_TYPE = typeof( ContentSizeFitterEditor );

    public override void OnInspectorGUI()
    {
        var contentSizeFitter = ( ContentSizeFitter ) target;
        var editor            = CreateEditor( contentSizeFitter, BASE_EDITOR_TYPE );

        editor.OnInspectorGUI();

        void SetFitMode( ContentSizeFitter.FitMode fitMode )
        {
            if ( contentSizeFitter.horizontalFit == fitMode &&
                 contentSizeFitter.verticalFit == fitMode )
            {
                return;
            }

            contentSizeFitter.horizontalFit = fitMode;
            contentSizeFitter.verticalFit   = fitMode;

            EditorUtility.SetDirty( contentSizeFitter );
        }

        using ( new EditorGUILayout.HorizontalScope() )
        {
            if ( GUILayout.Button( "Unconstrained" ) )
            {
                SetFitMode( ContentSizeFitter.FitMode.Unconstrained );
            }

            if ( GUILayout.Button( "Min Size" ) )
            {
                SetFitMode( ContentSizeFitter.FitMode.MinSize );
            }

            if ( GUILayout.Button( "Preferred Size" ) )
            {
                SetFitMode( ContentSizeFitter.FitMode.PreferredSize );
            }
        }
    }
}

使用例