コガネブログ

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

【Unity】AspectRatioFitter の aspectRatio にスプライトのアスペクト比を設定できるようにするエディタ拡張

ソースコード

using UnityEditor;
using UnityEngine;
using UnityEngine.UI;

namespace Kogane.Internal
{
    internal static class AspectRatioFitterMenuItem
    {
        [MenuItem( "CONTEXT/AspectRatioFitter/Set Default Aspect Ratio" )]
        private static void SetDefaultAspectRatio( MenuCommand menuCommand )
        {
            var aspectRatioFitter  = ( AspectRatioFitter ) menuCommand.context;
            var defaultAspectRatio = GetDefaultAspectRatio( aspectRatioFitter );

            Undo.RecordObject( aspectRatioFitter, "Set Default Aspect Ratio" );

            aspectRatioFitter.aspectRatio = defaultAspectRatio;
        }

        private static float GetDefaultAspectRatio( Component component )
        {
            if ( component.TryGetComponent<Image>( out var image ) )
            {
                var sprite = image.sprite;
                var rect   = sprite.rect;

                return rect.width / rect.height;
            }

            if ( component.TryGetComponent<RawImage>( out var rawImage ) )
            {
                var texture = rawImage.texture;

                return ( float ) texture.width / texture.height;
            }

            return 0;
        }
    }
}

使用例

「Set Default Aspect Ratio」を選択すると
Image や Raw Image に設定されているスプライトのアスペクト比を
AspectRatioFitter の aspectRatio に設定できます