「Canvasにフィットさせる」とは?

imageのUIを、元の画像のアスペクト比そのまま、はみ出ないようにピッタリに、というイメージ。
Rect Transformを弄ってもできることはできるのだが、それだとimageがCanvasめいっぱい覆う感じになってしまうので、もう少し端に寄ってもらう方法とかないかな、と考えた次第。
1.環境について
Unityバージョン:2019.4.18f1
Visual Studio Community 2019バージョン:16.9.1
2.スクリプトですべて解決
色々とインスペクター弄るの面倒なので、アタッチして実行したら即完成するスクリプトを作った。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ImageSizeManager : MonoBehaviour
{
private float scaleRate;
// Start is called before the first frame update
void Start()
{
this.GetComponent().preserveAspect = true;
this.GetComponent().SetNativeSize();
Vector2 CanvasSize = transform.root.GetComponent().sizeDelta;
Vector2 ThisImageSize = this.GetComponent().sizeDelta;
if(CanvasSize.x<CanvasSize.y)
{
scaleRate = CanvasSize.x / ThisImageSize.x;
}
else
{
scaleRate = CanvasSize.y / ThisImageSize.y;
}
this.GetComponent<RectTransform>().localScale = new Vector3(scaleRate, scaleRate, 1);
}
}
3.応用編:Canvasピッタリ、から少し余裕を作りたい場合

上の画像は、Canvasの上下左右に10ずつ離したPanelです。まぁキッチリカッチリではなく少し離す、というのは想定される事例です。
これに対応させる場合、若干スクリプトを弄らなければなりません。とはいえ、そこまで苦でもないのですが。
一つ前の項目で少し書いた通り、このスクリプトはCanvasの縦横サイズを参照するのが基本となってます。
よって、Canvasの縦横サイズから少しずらすのならば、ずらした分だけ調整すればいいだけです。具体的にはこんな感じ。
Vector2 CanvasSize = transform.root.GetComponent().sizeDelta+new Vector2(-20,-20);
スクリプトの12行目のココ。
これがCanvasを参照している部分なので、ここからずれる分を引き算なり足し算すれば大丈夫です。
画像の例だと、私は上下左右に10ずつ余白を作ったので、縦と横、一片の長さをもとのCanvasと比較すると、(ローカル座標で)20短くなっていることがわかります。
それを引き算してスクリプトを保存、完成形はこちら。

以上です。